我想写一个抽象类,让谁继承它,他就会被迫在里面实现一个特定的功能。
例如,我写了一个抽象类。
class Car {
virtual double getFuelConsumption(int speed) = 0;
};
但如果我写了以下内容,它的编译结果是: 无编译错误 (尽管它没有实现getFuelConsumption())
class meme : public Car {};
更新:为什么会出现错误:(我知道如果完全是一辆车,那么它就不会有 getFuelConsumption
实现了什么如果是一个继承了类 Car
我想让这个工作)。)
double getPetrol(std::vector<Road> roads, const Car &car) {
car.getFuelConsumption(1);
}
成员函数'getFuelConsumption'的'this'参数类型为'const Car',但函数没有标记为const。
你写的代码是OK的,只要没有人实例化一个 "汽车 "类。meme
. 这是设计好的。
至于编译器,你的计划很可能是。
class meme : public Car
{
};
class ConcreteMeme : public meme
{
virtual double getFuelConsumption(int speed) {return 2.0;}
};
因为你可能需要中间接口, 所以没有问题. 只有当你试图实例化一个有纯虚拟方法的类时,问题才会出现。如果编译器阻止你拥有 meme
,你最终会陷入一个不能拥有 ConcreteMeme
.
你的代码是好的。meme
在没有实现纯虚拟方法的情况下,它根本无法使用。 现在编译的唯一原因是你还没有真正尝试使用它。