C++面向对象高级编程-侯捷

1、防御式声明

#ifndef _COMPLEX_
#define _COMPLEX_


...


#endif

作用:保证只include一次

2、inline function 在body内进行定义

更快,但最终能否inline由编译器决定

3、为什么应该用初始化列表

complex(double r=0, double i=0) : re(r), im(i)
{

}

两个阶段:初始化和赋值阶段,如果写在body里面,就放弃了初始化阶段,直接到赋值。这样效率就会降低。

4、尽量所有的参数传递都传引用,不要传值。返回值也尽量传引用。 (---侯捷)

如果不希望被改变,加const func(const complex&)

什么情况下返回值不能用引用:当函数结束后,引用的东西就消亡了,这种情况下,返回值就不能是引用。

如果返回的值,不是在函数体中创建的,返回的时候就可以传引用

5、使用友元函数可以直接使用private数据,而不是友元,需要定义专门的函数才能拿到private的数据。

相同class的各个objects互为friends(友元)

******************************************总结**********************************************

1、数据一定是private

2、参数尽可能以reference传递,加不加const,看情况

3、返回值也尽量用reference。加不加const,看情况

4、应该加const的地方就应该加const,否则可能会编译报错

5、尽量使用初始化列表

 

所谓stack(栈),所谓heap(堆)

Stack,是存在于某作用域(scope)的一块内存空间(memory space)。例如当你调用函数,函数本身即会形成一个stack用来放置它所接收的参数,以及返回地址。在函数体内声明的任何变量,其所使用的内存块都取自上述stack。 如 Complex c1(1, 2)

Heap,或称为system heap,是指由操作系统提供的一块global内存空间,程序自动分配(dynamic allocated)从中获得若干块(blocks)Complex* p = new Complex(3)

从栈中获得的空间,当作用域结束,空间就会被自动释放。从堆中获得的空间,必须手动释放;

static object,其生命在作用域(scope)结束之后仍然存在,直到整个程序结束。

global object,其生命在整个程序结束之后才结束。

---侯老师说其他地方没有这两页ppt,所以保存下来(^V^)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值