构造函数

*构造函数不负责给函数申请内存等操作

构造函数没有类型,不能有返回值。构造函数名字与类名一样。构造函数在实例化第一次时调用,之后就不能再次调用。构造函数同样可以重载。

数组对象构造函数

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出来的对象不自己实现析构会无法得到内存释放)

results matching ""

    No results matching ""