接口继续
接口继续是指子类只继续基类的纯虚函数,即只继续基类的接口,而不继续基类的实现,子类必须实现基类中的全部纯虚函数,否则子类也成为抽象类
- #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企服之家,中国第一个企服评测及商务社交产业平台。 |