钱能C++语言读书笔记(二)

钱能C++语言读书笔记(二)

 

1、  有内存申请,也就有内存释放。一般来说,需要定义拷贝构造函数的类,也需要析构函数,不需要拷贝构造函数的类,也无须定义析构函数。所以析构函数与拷贝构造函数是成对出项的。

因为析构函数是没有参数的所以函数形式是唯一的,没有重载的析构函数。

       析构函数在对象的生命周期行将结束的瞬时,由系统自动调用。因此,析构函数的调用不是通过显示语句表示的。

2、  转换构造函数

构造函数:Student(const string & s);即是初始化的对象创建方式,也是在告知如何将string

对象转换成一个Student对象。

3、  对象赋值

对象拷贝就是对象赋值

Person p1(“Ranny”);

Person p2 = p1; //对象赋值

类机制中有默认的赋值操作符,只要定义了类,就可以进行对象的赋值操作。但是默认的赋值操作符只管对象本体的复制,如果对象之间要深拷贝的话,则必须自定义赋值操作符。自定义赋值操作符必须注意,原来的对象已经存在,要先将原来的资源释放掉,然后再进行深拷贝式的复制。

 

运行结果:

赋值操作的参数与拷贝构造函数的参数是一致的,只有在功能上,赋值操作不管创建,只管复制。

赋值操作(=)的返回值必须是引用返回,这是为了与赋值操作符的语义一致。因为赋值操作的结果是一个可以递进操作的左值。

例如:

       int a;

       (a = 6)++; // a = 7;

如果赋值操作是临时对象,就不会有递进操作的能力,而且因为要额外创建对象,还要浪费空间和时间性能。所以赋值操作的返回不应该是临时对象。

4、  任何类,C++都有一个默认的赋值操作符,用来进行对象本体的复制。赋值操作符重载一般是在对象本体和对象实体不一致时,为了实现对象本体复制操作以外的操作而进行的。重载了赋值操作符,默认的赋值操作符就不复存在了。一般来说,赋值操作符是与拷贝构造函数和析构函数结对而行的。

5、  无参构造函数,也许是每一个类都必须具备,因为没有无参构造函数的类,无法具有class A {public: A(int);}; A a;的创建方式,也无法以默认的方式创建数组或向量,更无法以该对象的名义申请动态内存空间。如果一个类一定要设计成没有无参构造函数的形式,那一定是想限制类的创建方式。

6、  构造函数失败时的解决办法为异常处理。

7、  头文件的友元函数设计成inline,而inline函数若非类成员,则是一定要放在头文件中定义。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值