Effective C ++ 条款34
2015-05-31 10:30
295 查看
该条款讲的内容就是以下3点:
第一点:
pure virtual 成员函数的作用,纯虚函数的作用就是base class基类提供给derived class 派生类一个接口,而且只是起到接口的目的。
举到例子,
对于一幅图片,绘画功能必须有,但是各种派生出的对象图片绘画过程却都不同,所以在base class中只定义drew函数接口就行了,没有实现的必要。
第二点:
virtual 函数的作用,既提供接口,也提供实现(implement),这是为了定义缺省的功能,如果基类一个函数的功能能满足部分派生类的对象,那么最好把这个基类函数定义成virtual函数。这样做可以减小程序员的工作量。如下例子,person都会跑,青年人直接继承 run()跑的功能,而婴儿的 run()跑的功能却需要重写。
第三点:
non-virtual函数的意义是,对于基类中的函数功能,在每个派生类中都适用,没有重新定义的必要,没有覆盖的必要。那么选择non-virtual函数最合适。以下例子,只要是动物都需要吃,不用重写该功能
第一点:
pure virtual 成员函数的作用,纯虚函数的作用就是base class基类提供给derived class 派生类一个接口,而且只是起到接口的目的。
举到例子,
class picture { public: virtual void Drew()=0; }; class picture1:public picture { public: virtual void Drew() { //.......... }; }; class picture2:public picture { public: virtual void Drew() { //.......... }; };
对于一幅图片,绘画功能必须有,但是各种派生出的对象图片绘画过程却都不同,所以在base class中只定义drew函数接口就行了,没有实现的必要。
第二点:
virtual 函数的作用,既提供接口,也提供实现(implement),这是为了定义缺省的功能,如果基类一个函数的功能能满足部分派生类的对象,那么最好把这个基类函数定义成virtual函数。这样做可以减小程序员的工作量。如下例子,person都会跑,青年人直接继承 run()跑的功能,而婴儿的 run()跑的功能却需要重写。
class Person { public: virtual void run() { //.......... }; }; class adult:public Person { public: virtual void run() { //.......... }; }; class baby:public Person { public: virtual void run() { //.......... }; };
第三点:
non-virtual函数的意义是,对于基类中的函数功能,在每个派生类中都适用,没有重新定义的必要,没有覆盖的必要。那么选择non-virtual函数最合适。以下例子,只要是动物都需要吃,不用重写该功能
class animal { public: void eat() { //.......... }; }; class chicken:public animal { };
相关文章推荐
- 修改Fedora10显示语言
- html5.js
- js中arguments的用法
- 说说gogoTester-nodejs 的实现
- javascript javascript加载类似星座、血型的函数
- javascript处理HTML的Encode(转码)和Decode(解码)总结
- HTML-合集
- Fedora10 配置使用root用户登录
- HTML 表单(form) 使用详解
- hadoop集群格式化namenode出现异常
- BZOJ 1015: [JSOI2008]星球大战starwar( 并查集 )
- jquery.unobtrusive-ajax.js单独的用法
- JavaScript实现倒计时效果
- Fedora21下安装 sqlite3
- javascript学习代码--点击按钮显示内容
- javascript学习代码
- jquery倒计时demo
- struct inode
- CSS3 3d旋转效果
- JSplitPane demo