C++的构造函数和析构函数

来源:互联网 发布:能微信提现的赚钱软件 编辑:程序博客网 时间:2024/06/05 03:18
class A{public:A(){}//构造函数
~A(){};//析构函数};

构造函数
创建类的实例的时候,会自动调用构造函数。
如果没有自己实现构造函数,则系统会自动生成一个默认的构造函数。如果已经实现了,那么默认的构造函数会失效。
构造函数可以重载。
函数名和类名一致。

函数没有返回值。

析构函数

 类生命周期结束后,用来清理类里的资源的函数。

如果没有显式地去定义的话,编译器会自动生成一个,不做任何事。

如果显式定义,则编译器不会自动生成。

 析构函数以~开头,函数的名字和类名一致,没有参数。没有返回值。

拷贝构造函数

当发生类的实例之间赋值时,会出现两个类之间的成员拷贝。

这种拷贝在某些情况下是没问题的,但是如果成员变量是指针,且在构造函数里动态分配内存,在析构函数里释放,就会出问题。

#include <iostream>#include <cstring>using namespace std;class Automate{    private:        double p;        char *name;    public:    //只读成员变量只能用初始化列表的方式初始化        Automate(double _p):p(_p),//将price变量初始化为_price        {            name=new char[20];                    }        void show(void)        {            cout<<p<<endl;        }        //析构函数    ~Automate(void)    {        if(name)        {            delete name;            name=NULL;        }        cout<<"类在此被析构"<<endl;    }    //自己的拷贝构造函数    Automate(const Automate &automate)    {        name=new char[20]; //自己申请自己的空间        strcpy(name,automate.name);        p=automate.p;    }};int main(void){   Automate automate(2.5);//第一个实例   Automate automat2=automate;  //让第二个实例等于第一个实例   //发生了类之间的拷贝,也就是等价于下面:   /*   automat2.price=automate.price;   automat2.name=automate.name;   automat2.balance=automate.balance;   */   automat2.show();   Automate automate3(automat2);   automate3.show();   Automate *p=new Automate(automate3);   p->show();   }




0 0
原创粉丝点击