<C++里默认给出的函数>
1.构造函数
2.析构函数
3.拷贝构造函数
4.赋值语句
5.地址重载运算符(取址符)
6.对const取对象的地址符
一.构造函数
1.关键字explicit
在构造函数前加上explicit时构造函数必须显示调用
例如Test是类名,有一个Test的构造函数,有两个参数。若果加上关键字explicit的话不能写成Test(10),只能显示地赋初值,如Test(10,20)。
2.调用时间
构造函数被调用时往往是在构造了对象的时候。注:不知是在主函数里构造对象时调用,若一个函数里是以构造的对象为参数,此时也调用了构造函数。总言之,无论在哪里,只要构造了对象,就一定会调用构造函数。
3.构造函数的作用
a.构造对象
b.初始化对象
c.类型转换
<对c点做一个说明>:若定义了一个构造函数
Test(int d=0):date(d)
主函数里定义了一个对象并对其初始化:
<span style="font-size:18px;">void main()
{
Test y;
y=10;
}</span>
此时语句“y=10”实际上是发生了强制类型转换,将一个整数转换成类的对象形式。
<关于类型转换>
有一个Test类,主函数这样描述的:
<span style="color:#000000;">void main()
{
Test t;
t = 10;
//int value;
//value = t;
}
</span>
画注释的两句是错误的,不允许这样复制,等号两边类型不同。解决方法:可以重载int 类型,如下:
public:
operator int()
{
return m_data; //m_data是Test中的一个私有成员。
}
二.析构函数
1.当撤销对象时,自动调用析构函数
2.析构函数不能重载,一个类中只能有一个析构函数
3.用new动态分配内存空间时,应显示调用析构函数
三.拷贝构造函数
1.赋值和拷贝
<span style="font-size:14px;">Test t=t1;
Test t(t1);</span>
此时是调用拷贝构造函数
<span style="font-size:14px;">Test t;
t=t1;</span>
此时是赋值,不调用拷贝构造函数
2.调用拷贝构造的三种情况
a.用一个对象初始化顶一个对象时
b.对象作为函数参数时
c.函数返回值是类的对象时
3.深拷贝和前拷贝
浅拷贝:只拷贝了一个指针指向同一空间
深拷贝:拷贝了一个指针并且还有一份空间
另:若类的数据成员出现指针,一般需要重新编写拷贝构造。