Effective C++笔记(六):继承与面向对象设计
2016-04-20 14:29
435 查看
参考:http://www.cnblogs.com/ronny/p/3756494.html
purevirtual函数只具体指定接口继承
简朴的(非纯)impurevirtual函数具体指定接口继承及缺省实现继承。
non-virtual函数具体指定接口继承以及强制性实现继承
造成上面行为的原因是,non-virtual是静态绑定的,区别于virtual函数的动态绑定。
因为父类的所有行为在派生类都是被允许的,而list允许元素重复,而set则显然不行,所以set与list之间不符合is-a关系,我们可以把list设计为set的一个成员,即包含关系(has-a)。
条款32:确定你的public继承塑模出is-a关系
“public继承”意味着is-a。适用于baseclasses身上的每一件事情一定也适合于derivedclass身上,因为每个derivedclasses对象也都是一个baseclasses对象。条款33:避免遮掩继承而来的名称
derivedclasses内的名称会遮掩baseclasses内的名称。Derivedd; intx; d.mf1();//ok,调用Derived::mf1 d.mf1(x);//error,因为Derived::mf1遮掩Base=::mf1 d.mf2();//ok,调用Base::mf2 d.mf3();//ok,调用Derived::mf3 d.mf3(x);//error,因为Derived::mf3遮掩了Base::mf3
条款34:区分接口继承和实现继承
接口继承和实现继承不同。在public继承之下,derivedclasses总是继承baseclass的接口。purevirtual函数只具体指定接口继承
简朴的(非纯)impurevirtual函数具体指定接口继承及缺省实现继承。
non-virtual函数具体指定接口继承以及强制性实现继承
条款35:考虑virtual函数以外的其他选择
。。。。。。。。条款36:绝对不重新定义继承而来的non-virtual函数
当派生类中重新定义了基类中的non-virtual函数时,如果用指向基类类型的指针(实际指向派生类对象)来访问该non-virtual函数时,访问的是基类对象的non-virtual函数。造成上面行为的原因是,non-virtual是静态绑定的,区别于virtual函数的动态绑定。
条款37:绝不重新定义继承而来的缺省参数值
virtual函数系动态绑定的,而缺省参数值是静态绑定的。
条款38:通过复合塑模出has-a或“根据某物实现出”
复合或包含意味着has-a。如果我们想设计一个自己的set,我们思考后觉得可以用list来实现它,但是如果我把它设计出list的一个派生类,就会有问题,因为父类的所有行为在派生类都是被允许的,而list允许元素重复,而set则显然不行,所以set与list之间不符合is-a关系,我们可以把list设计为set的一个成员,即包含关系(has-a)。
相关文章推荐
- c++文件操作std::ifstream std::string::find() 和 std::string::npos
- c++知识总结
- C++编程中的函数指针初步解析
- C语言02基础深入理解(二)
- C 数列计算问题
- C++中的c_str()函数用法
- Hypertable 简介 一个 C++ 的Bigtable开源实现
- C++ WINDOWS API 如何使用NMAKE和CL编译
- C++编写DLL的方法
- segmentation fault (core dumped) 调试
- C++ map关联容器删除元素
- C++单例
- 详解C语言结构体中的函数指针
- 学C++百度
- 详解C语言的结构体中成员变量偏移问题
- c++ 读入字符的函数简介
- 第4周 C语言及程序设计提高例程-9 函数的嵌套调用
- 强大的c/c++测试工具--lint简介
- 实例讲解C语言编程中的结构体对齐
- C语言的小算法技巧