构造函数和析构函数
#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;
}