知识点一 关于类的构造函数和析构函数:
1、构造函数不必须与类名相同,不具有类型,不返回任何值。
2、构造函数可以重载、便于用户输入不同类型的参数。
3、默认构造函数为不含任何参数的构造函数,或称为“缺省构造函数”。
4、先构造的后析构,后构造的先析构。
5、在全局范围内定义的对象(所有函数以外定义的对象),它的构造函数在文件中的所有函数(包括main函数)执行之前调用。如果有多个文件中都定义了全局对象,这些对象的构造函数的调用顺序是不确定的。当main函数执行完毕后或者调用exit函数时(此时函数终止),调用析构函数。
6、对象赋值是指同类对象所有数据成员的赋值,不对成员函数赋值(函数只是代码段,不需要也五福赋值)。
7、类的数据成员中不能包括动态分配的数据。
先贴一段代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Class1
{
public:
Class1() :_index(0)
{
cout << "Create" << endl;
}
Class1(int index) :_index(index)
{
cout << "Create" << _index << endl;
}
~Class1()
{
cout << "Destroy" << _index << endl;
}
Class1& operator=(const Class1& other)
{
cout << "operator= from " << other._index << " to " << _index << endl;
return *this;
}
Class1& operator=(Class1&& other)
{
cout << "operator=2 from " << other._index << " to " << _index << endl;
return *this;
}
private:
int _index;
};
int _tmain(int argc, _TCHAR* argv[])
{
{
Class1 obj; //1
}
{
Class1 obj1(1); //2
Class1 obj2(2); //3
Class1 *obj3 = new Class1(3); //4
obj2 = obj1; //5
obj2 = *obj3; //6
}
return 0;
}
运行结果:
Create
Destroy0 //1
Create1 //2
Create2 //3
Create3 //4
operator= from 1 to 2 //5
operator= from 3 to 2
Destroy2
Destroy1 //6
解析1:关于类的构造和析构
{
Class1 obj; //1
}
表示该类被构造,在该代码段运行结束,该类被析构;第二段中,先将上述所有的类构造后,在代码段结束时,调用析构函数,顺序为先构造的后析构。
C++:类的构造函数和析构函数
知识点二、拷贝构造函数:
1、拷贝构造函数时一种特殊的构造函数,实现对象的复制。如果用户自己未定义复制构造函数,编译器自己提供一个默认的复制构造函数,其作用是简单的复制类中的每个数据成员,被称为“浅拷贝”,就是对于有指针数据的成员所指向的内存单元的数据是不能被默认拷贝过去的。
2、其形式为:类名 对象一 对象二,如:BOX::BOX(const BOX &b))
3、当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。主要是拷贝指针指向的内存单元的内容。
解析2:拷贝构造函数:
obj2 = obj1; //5