C++中级-(构造函数,拷贝构造函数,析构函数)

构造函数和析构函数

 

#include <iostream>
#include <string>
using namespace std;
//创建一个类,C++编译器会给类添加至少三个函数
//默认构造函数;析构函数;拷贝构造函数,当自己创建这三个函数时就会抵消掉默认创建的函数了。
/*
构造函数:进行初始化,可以有参数和发生重载,创建对象自动调用。类似python__INIT__方法。
析构函数:进行清理,不可以有参数和发生重载,对象销毁前自动调用一次。
*/

class UserInfo
{
public:
    //1.构造函数
    UserInfo()
    {
        cout << "ready!\n";
    };

    //2.析构函数
    ~UserInfo()
    {
        cout << "Finish \n";
    };



};




int main() {
    UserInfo u1;//实例化时自动调用构造函数
    return 0;
}

构造函数的分类和调用

#include <iostream>
#include <string>
using namespace std;

class UserInfo
{
    public:
        int age;
        //无参构造
        UserInfo(){
            cout << "ready!" << endl;
        };

        //有参构造
        UserInfo(int a) {
            age = a ;/
            cout << "Has args" << endl;
        };
        //拷贝构造函数
        /*
        使用已经创建完毕的对象来初始化一个新对象
        当自己没写这函数的时候,并且实例化UserInfo u4(u3),系统会自动创建一个拷贝构造函数,并且内部实现的是浅拷贝。
        如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,自己进行堆区数据的释放。才能防止浅拷贝带来的问题。
        */
        UserInfo(const UserInfo &u1) {
            age = u1.age; //传入对象的所有属性拷贝到当前对象;浅拷贝;
            cout << "Copying func" << age << endl;
        };

        ~UserInfo() {
            cout << "Finish" << endl;
        };
};

//调用
void test() {
    UserInfo u1;//无参构造调用
    UserInfo u2(10);//有参构造调用
    UserInfo u3(u2);//拷贝构造调用
    cout << "P2 age:" << u2.age << endl;
    cout << "P3 age:" << u3.age<<endl;
};


int main() { 
    test();
    return 0; 
}

 

posted @ 2021-01-10 17:31  y0um  阅读(112)  评论(0编辑  收藏  举报

新人优惠服务器