一、构造函数可以被重载,因为构造函数可以有很多歌,而且可以带参数
析构函数不行,第一不能带参数,第二只有一个
二、构造函数内调用构造函数只是在栈上生成一个临时对象,对自己本身毫无影响
三、普通构造函数能够被隐式调用,而explicit构造函数只能被显示调用
class Test1
{
public:
Test1(int n){num = n;}
private:
int num;
};
class Test2
{
public:
explicit Test2(int n){num = n;}
private:
int num;
};
int main()
{
Test1 t1 = 12; //隐式调用其构造函数,成功
Test2 t2 = 12; //编译错误,不能隐式调用其构造函数
Test2 t3(12); //显示调用成功
return 0;
}
四、explicit构造函数的作用
五、当一个类被用来作为基类的时候,才会把析构函数携程虚函数,否则执行的是基类的析构函数
六、析构函数的执行顺序与构造函数相反
七、复制构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构件及初始化,如果在类中没有显式的声明一个复制构造函数,那么编译器会私底下制定一个函数来进行对象之间的位复制。这个隐含的赋值构造函数简单的关联了所有的类成员。
在C++中,以下3中对象需要复制的情况,,复制构造函数会被调用
#include
using namespace std;
class Test
{
public:
int a;
Test(int x)
{
a = x;
}
Test (Test &test)
{
cout<< "copy constructor"<
a = test.a;
}
/* data */
};
void fun1(Test test)
{
}
Test fun2()
{
Test2 t(2);
cout<<"fun2"<
return t;
}
int main()
{
Test t1(t);
Test t2 = t1;
cout<< "before fun1"<
fun1(t1);
Test t3 = fun2();
cout<<"after fun2"
return 0;
}
浅复制是指让新旧两个对象指向同一个外部的内容,二深复制是指为新对象只做了外部对象而独立复制。
八、编写继承类的复制函数的一个原则,使用基类的赋值构造函数。
阅读(893) | 评论(0) | 转发(0) |