博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
条款34:区分接口继承和实现继承
阅读量:5955 次
发布时间:2019-06-19

本文共 1147 字,大约阅读时间需要 3 分钟。

在设计类的继承时,一般有三种想法:

1 只继承函数接口

2 继承函数接口及其实现,并且允许修改该实现

3 继承函数接口及其实现,但是不允许修改该实现

 

考虑如下例子: 

1 #include 
2 3 class Shape 4 { 5 public: 6 virtual void draw() = 0; // 只提供接口 7 virtual void error(const std::string& msg); // 提供接口的同时提供一份默认的实现,派生类可以修改为自己的实现版本 8 int objectID() const; // 提供接口的同时提供一份强制性的实现,派生类一般不应该修改该实现 9 };10 void Shape::error(const std::string& msg) // 接口的默认实现11 {12 13 }14 int Shape::objectID() const // 接口的强制实现15 {16 return 0;17 }18 19 class Rectangle : public Shape20 {21 virtual void draw();22 };23 void Rectangle::draw(){}24 25 int main()26 {27 int id;28 Shape* ps1 = new Rectangle;29 ps1->draw(); // 调用Rectangle::draw30 ps1->error("Shape::error"); // 调用Shape::error31 id = ps1->objectID(); // 调用Shape::objectID32 33 return 0;34 }

 

总结:

  • 声明一个纯虚函数的目的是为了让派生类只继承函数接口,不必提供实现
  • 声明虚函数的目的是提供接口的同时提供一份默认的实现,派生类可以修改为自己的实现版本
  • 声明非虚函数的目的是提供接口的同时提供一份强制性的实现,派生类一般不应该修改该实现(就像上例中的objectID函数,其函数体总是由相同计算方式得到的,因此不必在派生类中修改)

转载于:https://www.cnblogs.com/benxintuzi/p/4525475.html

你可能感兴趣的文章
Linux常用命令--iconv
查看>>
varnish的了解与常用配置使用
查看>>
Product user profile information 没有导入
查看>>
DELL T410服务器U盘安装Centos7
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Sqlserver2008日志压缩
查看>>
虚拟机usb无线上网同时主机本地上网或无线无线上网
查看>>
View的事件分发机制
查看>>
Android Ndef Message解析
查看>>
mysqldump backup script
查看>>
coding4fun比赛总结
查看>>
Windows Server 2003 系统安装
查看>>
庖丁解牛获取连接状态数的awk数组命令
查看>>
jQueryMobile新版中导航栏按钮消失的解决方法
查看>>
使用触发器记录oracle用户登陆信息
查看>>
postgresql 用户安全配置
查看>>
一张图看懂normal,static,sealed,abstract 的 区别
查看>>
5 kvm虚拟磁盘扩容
查看>>
关于Ubuntu下apt的一些用法及和yum的比较
查看>>
android随机运算器开发小结1
查看>>