如何实现接口继续与实现继续的区别?

打印 上一主题 下一主题

主题 862|帖子 862|积分 2590

接口继续

接口继续是指子类只继续基类的纯虚函数,即只继续基类的接口,而不继续基类的实现,子类必须实现基类中的全部纯虚函数,否则子类也成为抽象类
  1. #include<iostream>
  2. using namespace std;
  3. // 纯虚类,用作接口
  4. class Shape {
  5. public:
  6.     virtual ~Shape() = default;//显式地使用= default来指定默认析构函数
  7.     virtual void draw() const = 0;  // 纯虚函数,派生类必须实现
  8. };
  9. class Circle : public Shape {
  10. public:
  11.     void draw() const  {
  12.         // Circle 特有的实现
  13.         std::cout << "Drawing Circle" << std::endl;
  14.     }
  15. };
  16. int main() {
  17.     Shape* s = new Circle();
  18.     s->draw();
  19. }
复制代码

实现接口

实现继续是指子类不但继续基类的接口,还继续基类的实现,子类可以重写基类的函数,也可以直接使用基类的函数实现
  1. #include<iostream>
  2. using namespace std;
  3. // 纯虚类,用作接口
  4. class Shape {
  5. public:
  6.     virtual ~Shape() = default;
  7.     // 提供默认实现
  8.     virtual void draw() const {
  9.         std::cout << "Drawing a generic shape" << std::endl;
  10.     }
  11. };
  12. class Circle : public Shape {
  13. public:
  14.     void draw() const override {
  15.         // 调用基类实现,避免重复代码
  16.         Shape::draw();
  17.         std::cout << "Specifically drawing a circle" << std::endl;
  18.     }
  19. private:
  20.     double radius = 1.0;
  21. };
  22. int main() {
  23.     Circle c;
  24.     Shape& s = c;
  25.     s.draw();
  26.     return 0;
  27. }
复制代码

应用场景

接口继续:实用于定义一组通用的接口,让不同的类实现这个接口,以实现多态性,比方,在图形绘画体系中,可以定义一个抽象的图形接口类,让不同的具体图形实现这个接口
实现继续:实用于已有类的基础上进行扩展和修改,继续基类的实现可以淘汰代码的重复。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表