使用派生类的方法由派生类实例化的基对象

时间:2021-05-08 19:17:11

标签: c++ class oop base derivative

由于我对 OOP 非常不熟悉,我决定改变它并编写我的第一个“基于类”的项目。我遇到了一个问题,我不知道如何用语言来解释(问题标题是灾难性的,我知道),所以我将粘贴应该使我的问题清晰的代码

void basecheck() {
    std::cout << "base check" << std::endl;
}

void derivativecheck() {
    std::cout << "derivative check" << std::endl;
}

class mybase {
public:
    mybase() {
        std::cout << "base constructor" << std::endl;
        check = basecheck;
    }
    void (*check)();
};

class myderivative : public mybase {
public:
    myderivative() {
        std::cout << "derivative constructor" << std::endl;
        check = derivativecheck;
    }
};

int main() {
    std::list<mybase> mylist;
    mylist.push_back(myderivative());
    mylist.front().check();
    return 0;
}

这符合我的预期(mylist.front().check() 打印出“派生检查”),但如果可能的话,我宁愿避免使用函数指针(它们看起来不是很面向对象)我想学习它而不是使用肮脏的黑客)。但是,我完全不知道如何摆脱它们并保留当前功能,因为:

  • 如果我让“check”成为一个纯虚函数,那么我就不能再声明一个“mybase”类型的列表,
  • 如果我尝试覆盖派生类中的 check(),则调用 mylist.front().check() 将打印出 mybase 的 check() 而不是 myderivative 的 check(),
  • 如果我删除基类的函数体,则代码将无法编译,

我不知道还有什么可尝试的,如果您能提供帮助,我将不胜感激。

0 个答案:

没有答案
相关问题