Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180114
  • 博文数量: 64
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 616
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-09 20:25
文章分类

全部博文(64)

文章存档

2016年(25)

2015年(39)

我的朋友

分类: C/C++

2016-02-17 19:56:35

一、构造函数可以被重载,因为构造函数可以有很多歌,而且可以带参数
     析构函数不行,第一不能带参数,第二只有一个
二、构造函数内调用构造函数只是在栈上生成一个临时对象,对自己本身毫无影响
三、普通构造函数能够被隐式调用,而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) |
给主人留下些什么吧!~~