王國慶 发表于 2024-12-17 16:14:37

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

接口继续

接口继续是指子类只继续基类的纯虚函数,即只继续基类的接口,而不继续基类的实现,子类必须实现基类中的全部纯虚函数,否则子类也成为抽象类
#include<iostream>
using namespace std;
// 纯虚类,用作接口
class Shape {
public:
    virtual ~Shape() = default;//显式地使用= default来指定默认析构函数
    virtual void draw() const = 0;// 纯虚函数,派生类必须实现
};

class Circle : public Shape {
public:
    void draw() const{
      // Circle 特有的实现
      std::cout << "Drawing Circle" << std::endl;
    }
};
int main() {
    Shape* s = new Circle();
    s->draw();
}
实现接口

实现继续是指子类不但继续基类的接口,还继续基类的实现,子类可以重写基类的函数,也可以直接使用基类的函数实现
#include<iostream>
using namespace std;
// 纯虚类,用作接口
class Shape {
public:
    virtual ~Shape() = default;

    // 提供默认实现
    virtual void draw() const {
      std::cout << "Drawing a generic shape" << std::endl;
    }
};

class Circle : public Shape {
public:
    void draw() const override {
      // 调用基类实现,避免重复代码
      Shape::draw();
      std::cout << "Specifically drawing a circle" << std::endl;
    }

private:
    double radius = 1.0;
};
int main() {
    Circle c;
    Shape& s = c;
    s.draw();
    return 0;
}
应用场景

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 如何实现接口继续与实现继续的区别?