一、构造函数、析构函数、拷贝构造函数
- 构造函数:是一个类里用于创建对象的特殊子程序。它能初始化一个新建的对象,并时常会接受参数用以设定实例变量。
- 写法:没有返回值,不写void,函数名与类名相同;可以有参数,也可以发生函数重载;由编译器自动调用,不需要手动调用,且编译器只调用一次。
class MyClass
{
public:
//1、构造函数的写法
MyClass()
{
cout << "MyClass的构造函数调用" << endl;
}
};
3.分类:按参数分:有参构造函数、无参构造函数
按类型分:普通构造函数、拷贝构造函数
拷贝构造函数:是一种特殊的构造函数,习惯上用来创建一个全新的对象,这个全新的对象相当于已存在对象的副本。这种构造函数只有一个参数:就是用来复制对象的引用(常用const修饰)。
class Person
{
public:
//默认构造函数(无参构造函数)
Person()
{
cout << "Person的默认构造函数" << endl;
}
//有参构造函数
Person(int age)
{
m_Age = age;
cout << "Person的有参构造函数调用" << endl;
}
//拷贝构造函数
Person(const Person& p)//类名(const 类名&aa)
{
m_Age = p.m_Age;
cout << "Person的拷贝构造函数调用" << endl;
}
int m_Age;
};
4.调用方法
- 无参数构造函数:
void test01()
{
//无参构造函数
Person p;
}
- 有参构造函数三种:括号法、显示法、隐式法
void test02()
{
//括号法
Person p2(10);//有参构造
Person p3(p2);//拷贝构造函数调
cout << "p3的年龄:" << p3.m_Age << endl;
}
void test03()
{
//显示法
Person p4 = Person(10);//有参构造
Person p5 = Person(p4);//拷贝构造函数调
//注意点
//Person p();//不可以用括号法 调用无参构造 原因:Person p();这句话编译器会认为是一个函数声明
Person(10);//匿名对象 特点:当执行完之后,系统就回收了
}
void test04()
{
//隐式法 可读性不高
Person p6 = 10;//Person p6=10; 等价于 写了Person p6=Person(10);
Person p7 = p6;
}
二、析构函数
- 析构函数:在面向对象程序设计里是一个方法,当对象的生命周期结束时,它会自动地被调用执行。它的最主要目的在于,清空并释放对象先前创建或是占用地存储器资源。
- 写法:没有返回值,不写void,函数名与类名相同,在函数名前加~;不能有参数,不可以发生重载;由编译器自动调用,不需要手动调用,且编译器只调用一次。
class Myclass
{
//2、析构函数的写法
~MyClass()
{
cout << "MyClass的析构函数调用" << endl;
}
}