构造函数
*构造函数不负责给函数申请内存等操作
构造函数没有类型,不能有返回值。构造函数名字与类名一样。构造函数在实例化第一次时调用,之后就不能再次调用。构造函数同样可以重载。
数组对象构造函数
Class1 array1[2]={Class1(par1,par2),par}; //构造函数参数有一个以上的时候需要指名
Class1* array1[2]={new Class1(par1,par2),new Class(par)}
类型转换构造函数,只能有一个参数。除了可以作为构造函数来初始化,还可以使用'='赋值时自动调用并将'='右侧的值作为一个临时的类型对象赋值给'='左侧,一般在函数内实现类型转换。注意临时的对象在赋值完毕后会消亡,会调用'析构函数'。
复制构造函数
在型参使用以及栈调用返回为对象时被调用。在作用域外会自动调用析构函数。
class::class(class & r)
{
do something;
}
静态成员:在说明前加了static关键字的成员
相比于普通成员,静态成员的值,为所有对象共享。(不放在对象内部)本质上是全局变量,哪怕一个对象都不存在,它也存在。
相对于普通的全局成员,其实就是写到类里的全局成员,易于理解与维护。
访问方法,不作用于具体对象。类名::成员名或者对象名.成员名(但并不是作用于该对象,这么写只是方便) 所以,并不能在静态成员函数访问非静态成员变量。所以一般静态成员在析构和构造函数进行操作。
另外,因为复制构造函数不会调用构造函数,却会调用析构函数,注意对称性。
析构函数
当对象的生命周期结束的时候,会自动调用类的析构函数,所以通过在析构函数~func()中写delete会比自己在合适的逻辑处插入delete要方便。(因为对象在作用域{}外会自动调用析构,如果new出来的对象不自己实现析构会无法得到内存释放)