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

大纲

  • 以良好的方式编写C++ class - Object based (基于对象)
    对于class without pointer members 和 with pointer members有所不同(考虑浅拷贝和深拷贝问题)
  • classes 之间的关系 - Object oriented (面向对象)
    继承(is-a)、复合(has-a)和委托(composition by reference)

细节

  • 大气的程序应该注意的几点:
    1.头文件用 #ifndef #define #endif 进行防卫式声明。
    2.数据成员尽量private。
    3.尽量使用引用传递参数和返回值。
    4.不会改动到成员的函数用const进行限定。
    5.尽量使用构造函数的初始化列表,而不是在构造函数体内赋值。

  • 什么时候不能用用传引用返回?
    当函数中将返回值放在一个局部变量中时,若传引用返回,一旦函数返回则局部变量被消耗,便会出错。

  • 对象的所有成员函数中都带有隐藏的this指针,指向当前的对象。static函数属于类,不属于对象,没有this指针。友元函数不是类的成员函数,没有this指针。

  • operator<<不应被重载为成员函数。

  • class with pointer members必须有拷贝构造函数和拷贝赋值运算符operator=。一定要在operator= 中检查是否自我赋值,例如:

	if (this == &dest)
		return *this;
  • new的三个动作
    step 1:用operator new分配内存(其实operator new是通过malloc来实现的,会自动补上需要分配的内存大小)。
    step 2:将malloc返回的void *转换为具体类型的指针。
    step 3:调用对象的构造函数。

  • delete的两个动作:
    step 1:调用对象的析构函数。
    step 2:用operator delete释放内存(其实是通过free实现的)。

  • 类的static函数没有this指针,一般用于存取static数据。类的static数据只有一份,不会因为有多个实例(对象)而增加。

  • 类的静态成员(static member)必须在类内声明,在类外分配空间,但不一定要赋初值。

  • 复合
    composition

  • 委托也就是两个类用指针相连,Handle / Body(plmpl)。

  • 继承
    derived

  • Inheritance (继承) with virtual functions (虚函数)
    1.non-virtual 函数:你不希望derived class 重新定义(override,覆写)它。
    2.virtual 函数:你希望derived class重新定义(override,覆写)它,并且你对它已有默认定义。
    3.pure virtual 函数:你希望derived class一定要重新定义(override,覆写)它,并且你对它没有默认定义。

.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值