C++强制实现方法?[关闭]

问题描述 投票:0回答:1

我想写一个抽象类,让谁继承它,他就会被迫在里面实现一个特定的功能。

例如,我写了一个抽象类。

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。

c++ class methods abstract-class
1个回答
4
投票

你写的代码是OK的,只要没有人实例化一个 "汽车 "类。meme. 这是设计好的。

至于编译器,你的计划很可能是。

class meme : public Car
{

};

class ConcreteMeme : public meme
{
    virtual double getFuelConsumption(int speed) {return 2.0;}
};

因为你可能需要中间接口, 所以没有问题. 只有当你试图实例化一个有纯虚拟方法的类时,问题才会出现。如果编译器阻止你拥有 meme,你最终会陷入一个不能拥有 ConcreteMeme.


1
投票

你的代码是好的。meme 在没有实现纯虚拟方法的情况下,它根本无法使用。 现在编译的唯一原因是你还没有真正尝试使用它。

© www.soinside.com 2019 - 2024. All rights reserved.