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; }