关于构造,析构,拷贝构造函数,

<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.深拷贝和前拷贝

浅拷贝:只拷贝了一个指针指向同一空间

深拷贝:拷贝了一个指针并且还有一份空间

另:若类的数据成员出现指针,一般需要重新编写拷贝构造。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值