代码重用的手段,利用已有的类。
组合:类似于使用工具,现有的类作为子对象。砍树:斧头作为子对象
继承:类似于学习本领,现有的类作为师父。砍树:拜师练习砍树的本领。
不论是继承还是组合,在子类中,父类或者成员对象都作为子对象存在于一块内存之中。因为构造函数只初始化本层次的内容,所以在进入构造函数之前,子对象的构造一定要完成,这是c++强制要做的,因为不能让一个未初始化的对象存在。只有在初始化列表中初始化子对象。
子类中调用构造函数的次序:先调用父类构造函数,再调用子对象构造函数,按其声明顺序来,并不按照其在初始化列表中的顺序。析构相反。
名字隐藏:在继承中,只要子类中出现父类函数的名字,其他名字全部被隐藏(包括修改了参数和返回值),虚函数暂不涉及(提前报告,虚函数在子类中不能修改返回值)。
但是修改了基类函数的参数和返回值相当于修改了接口。
非自动继承的函数:
构造函数(拷贝构造函数)、析构函数、operator=操作符。如果不创建,编译器会自动创建。我们创建构造函数和赋值操作符的时候,最好显式地调用父类和成员对象的构造函数和赋值操作符。
所有的多重继承都可以用单继承实现。
向上类型转换
原理:子类和父类的基地址相同,子类可以向上类型转换为父类,编译器将该地址做为父类的基地址。必须是引用或者指针。
应该使用继承还是应该使用组合,看是否需要向上类型转换。
posted on 2012-06-04 14:37
Dino-Tech 阅读(199)
评论(0) 编辑 收藏 引用