读书笔记--C++程序设计语言(3)

1.常量成员函数

image

 

2. 自引用

3.协助函数

将一个类和他的协助函数定义在一个名字空间内。

4.具体类型的意义

int 和char 等内部类型有时也被称为值类型,而将他们的使用称为面向值的程序设计.这些类型的使用模型以及隐藏着它们设计背后的“哲学”与那种所谓的面向对象程序设计的东西之间存在着很大的差异。

在一个应用中,如果缺乏一批合适的“小而有效的类型”,并因此去使用过分一般且代价昂贵的类,就可能导致严重的时间和空间上的低效率。换一个角度,缺乏具体类型将导致结构模糊的程序和时间上的浪费,因为每个程序员都需要写代码,去之间操作“小儿频繁使用的”数据结构。

5.析构函数

析构函数,它通常完成一些清理和释放资源的工作。例如:当一个自动变量离开它的作用域,当一个位于自由存储的对象被删除时,还有在其他的类似情况,析构函数被隐式的调用。只有在非常特殊的情况下,用户才去显示的调用析构函数。

析构函数的最常见的用途是为释放构造函数请求的存储空间。

6.默认构造函数

默认构造函数就是调用时不必提供参数的构造函数,提供了默认参数的构造函数也是默认构造函数。如:

T(); T(size_t size = 10); 都为默认构造函数。

如果用户自己定义了一个默认构造函数,那么就会去调用它;否则,如果有必要,而且用户没有声明其他的构造函数,编译器就会设法去生成一个。 默认构造函数只能有一个。

由于const和引用必须进行初始化,包含const或引用成员的类聚不能进行默认构造,除非程序员显示的提供默认构造函数。

7. 构造和析构

a. 局部变量:一个命名的自动对象,当程序执行每次遇到它的声明时建立,每次程序离开它所出现的块时销毁。

b.对象的复制

复制构造函数 和 赋值复制

定义赋值操作时,当心自赋值,进行自赋值检查, if(this != &t)判断。

复制构造函数是去完成对未初始化的存储区的初始化,而复制赋值运行符则必须正确处理一个结构良好的对象。

c.自由存储

在自由存储中建立的对象时,有关的构造函数由new调用,这个对象将一直存在直到将delete函数作用域指向它的指针。

8.类对象作为成员

a.为类对象成员提供初始化列表,构造函数的调用顺序与初始化顺序一致,析构与构造相反逐个执行。

如果某个成员的构造函数不需要参数,在初始式列表里无须提到这个成员。

成员初始化的必要性,对于那些const成员和引用成员而言,对成员的初始式都是必不可少的。

有两种方式:初始式 和赋值。

b.成员常量

对那些静态整型成员,可以给它的成员声明加上一个常量表达式作为初始式。

only static const integral data members can be initialized within a class

不要试图在类里用枚举去初始化一个浮点数。

c.成员的复制

可以将复制构造函数和赋值运算符重载声明为private来实现无法对类对象实现复制构造和赋值操作。

在增加一个新的类成员时,总应该去检查,看是不是有用户定义的构造函数需要更新,以便完成对新成员的初始化和复制。

d.临时变量

临时对象最经常是作为算术表达式的结果出现的。

所谓完整表达式是那种不是其它表达式子表达式的表达式。

在表达式结束时,临时对象被销毁。

与临时对象有关的问题都出在以低级方式去使用高级的数据类型。

 

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值