c++php数组自定义排序数组类问题

一、为什么要引进类模板
减少代码重用。
这个概念在C++里有很多
二、类模板与模板类
(1)类模板的含义
类模板的意思是,按不同的方式重复使用相同的代码。
一个类模板(也称为类属类或类生成类)允许用户定义为类定义的一种模式,是的类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型
包括系统预定义的和用户自定义的
(2)类模板和类模板的概念
类模板:是一个类型参数化的样板,是一组类模板的集合
模板类:是某个类模板的一个实例
(3)类模板的定义格式
template &模板参数表&&&&&&&&&&&&&//------&模板参数表的形式 class(标识符)
class (类名)
&&&(类型说明)
//类体实现
(4)模板类的使用格式
&类模板名&&&对象名&
三、类模板的一个实例
下面这个代码实现的是有界的数组
利用类模板可以定义不同类型的数组(如int&、double)
#include&iostream&
//这是一个类模板,用于描述一个有界的数组
template &class AType&//尖括号里是模板参数表
class array//定义一个array类
array(int size);//构造函数
~array()//析构函数
delete []//释放
AType & operator[](int i);//运算符
//私有成员
AType *a;//私有成员
自定义类型的一个
template &class AType&
array&AType&::array(int size)//size为数组的大小
a = new AType[size];
cout&&&动态空间申请失败!&&&
for( i = 0;i&i++)
template &class AType&
AType & array&AType&::operator[](int i)
if(i&0 || i&length-1)//若输入 0 或者大于长度 ,那么越界
cout&&&\n这个数 &&&i&&& 越界了,退出程序!\n&;
return a[i];
/***********上面可以封装到一个头文件里,以后都可以用了*******/
int main()
array&int& a1(10);//定义模板类整型对象a1 ,括号里为数组大小
array&double& a2(5);//定义模板类双精度型对象a2
int i = 0;
cout&&&整形数组
for(int i(0); i&10; i++)//int i(0)是int类里面的构造函数,意思和 i = 0相同
a1[i] = i+1;//对数组元素进行赋值
for( i = 0; i&10 ; i++)
cout&&a1[i]&&&
&;//打印a1数组
cout&&&双精度数组:&;
cout.precision(4);//输出小数点后3位,第4位四舍五入。
for( i = 0; i&5; i++)
a2[i] = (double)(i+1)*3.14;//打印
for( i = 0; i&5 ; i++)
cout&&a2[i]&&&
a1[20] = 15;//这里判断 a1[20]越界了,然后调用 AType & array&AType&::operator[](int i),退出程序
a2[20] = 25.5;//这条语句并没有执行
运行结果:
类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。
---------&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9146次
排名:千里之外
原创:61篇
评论:11条
(8)(3)(21)(30)(4)14:01 提问
C++应该如何定义对象数组
class Student
Student(int n,int a,float s):num(n),age(a),score(s){}
void set_student();
void total();
static float average();
void Student::set_student()
cin&&num&&age&&
void Student::total()
float Student::average()
return sum/
int Student::count=0;
float Student::sum=0;
int main()
Student stu[10];
cout&&"Please input the number of students:(
for(i=0;i&n;i++)
stu[i].set_student();
stu[i].total();
cout&&"Average="&&Student::average()&&
代码可能有点长,但是要求很简单,通过键盘输入学生学号年龄成绩,输出成绩平均分,编译显示那个对象数组有问题,应该怎么改啊,没想明白。求指导,谢谢。
按赞数排序
创建对象数组需要完成俩项任务:1.为所有对象分配连续内存空间;2.为每个对象调用默认构造函数
因此你要创建对象数组必须得有默认构造函数,可以在类中添加一个Student(){}的构造函数;
如果没有默认构造函数,也可以这样 Student stu[2]={Student(1,2,3),Student(1,2,3)};(转)C++中定义常量及多维数组
C++中定义常量及多维数组
在C++中可以通过集中方法定义常量:
1)static关键字,通过这个关键字可以定义全局或者局部的静态常量,static关键字限制了常量的作用域,在本文件中定义的static常量,是在程序的固定内存中,只能在本文件中适用,而static局部常量只能在定义它的函数跨,或者基本快中适用,如果你要求一个局部变量在程序退出其某个块作用域后还能保留其值以便下次被利用,就可以在这个块中定义static局部变量。static局部变量并不经常适用,因为它占用程序的固定内存,不能很容易的被释放。static关键字也可以被用来修饰函数,表示函数在除了本文件之外的其他文件不能适用,通常在C++中static对象只能被static函数访问,因为static对象在程序的固定内存中,没用隐含的this指针。因此我认为对static常量的访问不需要进程同步,因为编译器会限制别的进程对本进程static成员的访问
2)const关键字,const常量意味着只读,以const关键字修饰的常量在作为函数参数传递时不得对其进行修改。
3)enum关键字,格式如下:enum{bule,red,yellow};如果看值的话,bule=0,以此类推。
关于C++中多维数组的问题:先看程序
&iostream&
int main()
int a[2][3]={{0,1,2},{4,5,6}};
cout&&*a[0]&&
cout&&**a&&
cout&&**(a+1)&&
输出什么呢?0 0 4
原因:第一次输出是数组第一行的第一个值,第二次输出是数组的第一个元素,第三次输出是数组第二行第一个元素,你看懂了吗?
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 c 自定义数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信