变量——捆绑封装——类
函数——
类概念及基本语法
引用名就是给函数重新定义一个名字,方便调用
定义函数都是写了Rectangle::表示后面函数是Rectangle类的一个成员函数,而不是一个普通函数
默认函数——构造、析构、复制构造、赋值与取址
class cellphone{
每个物体都有诞生和消亡——构造函数与构析函数
public:
cellphone(); 构造函数,类的同名函数,当定义一个对象时会自动调用构造函数,
也就是初始化函数,构造函数可以有参数,默认的构造函数是没有参数的
~cellphone(); 对象死亡时,要告诉别的我死了,用析构函数
可以被复制
cellphone(const cellphone&);复制构造函数,默认是把一个对象完完全全都复制到另一个对象中去
cellphone & operator=(const cellphone&);等号(相同操作)
可以取地址
cellphone * operator&();主要是支持了取址符操作(&)
const cellphone*operator&() const;
private:
int electricty;
}
特殊成员——this指针
是指向类自己的指针,但并不是类的真实成员,是常量指针,不能修改
可以通过this指针来访问自己的地址,例如在类的函数中使用this指针,就指向了自己
但并不是类的真实成员,非static成员函数调用时,this指针为隐式参数
功能:防止自赋值、返回以连续调用
class Complex{
float real,imag; #实部、虚部(默认是不可以访问的)
public:
Complex*ReturnAddress(){ #返回地址方法,用复数类的指针类型
return this;
} #c.ReturnAddress()等效于&c
float ReturnReal(){ #返回实部
return this->real; #等效于return real
}
};
函数模板与类模板
函数模板:让我们一次性定义一系列函数的办法
eg:定义对不同类型数据的排序函数,需要对整型、浮点型等都要定义,用函数模板可以一次性定义出来
template<class T>#template开头表示这是一个模板,<>中是模板参数
return-type sort(...T...)#和普通函数一样,返回值、参数名、参数列表
一个实际的输出函数:(作用输出一个数组,大小是size,不知道数组的具体类型)
template<class T>#模板函数,用T代替具体的类型
void print(const T array[],int size){
int i;
for(i=0;i<size;i++)cout<<array[i];
return;
}
int a[10];print(a,10);
类模板:像一个容器,给它一个/多个参数,这个/些参数表示不同的数据类型。调用类模板时,指定参数,由编译系统根据参数提供的数据类型自动生成相应的模板类
类模板的定义
template<class T>#类模板的首部,声明类模板的参数
class Carray{
T*ptrElement;
int size;
public:
Carray(int length);
~Carray();
int len();
void setElement(T arg,int index);
T getElement(int index);
}
使用类模板声明变量
Carray<int> arrayInt(50),*ptrArrayInt;
#创建一个元素类型为int的Carray模板类,并声明该模板类的一个对象,以及一个指针
不同模板参数参数的模板类,不是同一个类