如何实现接口继续与实现继续的区别?
接口继续接口继续是指子类只继续基类的纯虚函数,即只继续基类的接口,而不继续基类的实现,子类必须实现基类中的全部纯虚函数,否则子类也成为抽象类
#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]