c++基础(纯虚函数)
2019-04-30 本文已影响64人
zidea

内容和代码接档此内容可以做为参考
c++基础(纯虚函数)
所谓纯虚函数就是在基类中这个虚函数只是证明并没有具体实现要求其子类来对其进行实现。
类似 java 中接口类和抽象类的抽象方法。
virtual std::string GetName() = { return "Shape"};
将函数修改为
virtual std::string GetName() = 0;
这样函数 GetName 就变成了纯函数。
Shape *s = new Shape();
此时 Shape 类型变量 s 只能接受其子类的 Rect 的实例,并且在 Rect 类中必须实现GetName
这个虚函数。
Shape *s = new Rect("rectangle");
在 java 语言通过关键字提供 interface (接口)的定义,接口让类按行为进行分类。在 c++ 中没有提供像 interface 这样关键字让我们显式地定义接口,不过可以通过纯虚函数来实现相同功能。
void print(??? object){
std::cout << object.GetName() << std::endl;
}
定义print
接收一个具有GetName
方法(也就是行为)的对象。
我们可以先通过定义存虚拟函数定义一个接口类 Printable
class Printable
{
public:
virtual std::string GetName() = 0;
};
这个类中只有纯虚函数,功能和 java 中类一样。
接下来让 print 接收一个 Printable 类型的对象作为参数
void print(Printable *obj)
{
std::cout << obj->GetName() << std::endl;
}
创建一个继承 Printable 并实现纯虚函数的Printable的子类 A。
class A : public Printable
{
public:
std::string GetName() override
{
return "A";
}
};
A *a = new A();
print(a);
以上就是通过虚函数实现了一个接口。