-2 c++ methods abstract-class class
我想写一个抽象类,所以无论谁继承它,他都将被迫在其中实现一个特定的功能。
例如我写道:
class Car {
virtual double getFuelConsumption(int speed) = 0;
};
Run Code Online (Sandbox Code Playgroud)
但是,如果我编写以下内容,它会在没有编译错误的情况下进行编译(即使它没有实现 getFuelConsumption())
class meme : public Car {};
Run Code Online (Sandbox Code Playgroud)
更新:为什么我收到错误:(我知道如果它确实是一辆车,那么它没有getFuelConsumption实现如果它是一个继承 class 的类会怎样Car,我希望它起作用)
double getPetrol(std::vector<Road> roads, const Car &car) {
car.getFuelConsumption(1);
}
Run Code Online (Sandbox Code Playgroud)
> 'this' argument to member function 'getFuelConsumption' has type
> 'const Car', but function is not marked const
Run Code Online (Sandbox Code Playgroud)
你写的代码是可以的,只要没有人实例化一个meme. 这是设计使然。
就编译器而言,您的计划很可能是:
class meme : public Car
{
};
class ConcreteMeme : public meme
{
virtual double getFuelConsumption(int speed) {return 2.0;}
};
Run Code Online (Sandbox Code Playgroud)
由于您可能需要中间接口,因此没有问题。只有当您尝试实例化具有纯虚方法的类时才会出现问题。如果编译器阻止您拥有meme,您最终会遇到无法拥有ConcreteMeme.