【问题标题】:Overriding pure virtual functions such that derived class is not abstract覆盖纯虚函数,使得派生类不是抽象的
【发布时间】:2020-08-01 01:28:30
【问题描述】:

假设我有一个抽象基类

class base
{
public:
virtual void function() = 0;
};

后跟派生类

class derived_1 : public base
{
public:
... function() ...;
};

如果我不想定义上面的函数,但我希望 derived_1 不是抽象的,我怎么能重载它,所以我可以实例化它?

这些类后面跟着另一个类

class derived_2 : public base, public derived_1
{
public:
void function()
{
// What my function does
}

基本上,我希望两个派生类都被实例化,但我希望它们都使用基类作为接口,而derived_2 继承derived_1。主代码中要使用的纯虚函数重载需要在derived_2类中。

有人知道我该怎么做吗?

非常感谢!

【问题讨论】:

  • 你不能有一个带有纯虚函数的非抽象类。
  • 然后用一个空的body定义function
  • 在您的代码中,derived_1 不是从任何东西派生的。
  • 如果你真的想这样做,你可以用一个空的主体来实现它,或者抛出一个异常(可能不太容易出错)。但是,如果您问这个问题,这可能不是正确的结构。 (也许你应该使用两个不同的基类?)
  • 另外,请注意:您实际上不需要derived_2 来继承basederived_1(只需derived_1 也可以这样做,但更简洁)

标签: c++ class inheritance interface base


【解决方案1】:

将函数定义为纯虚函数意味着它必须由子类实现才能使它们不是抽象的。这里没有很多关于你的程序的信息,但是如果你需要做类似的事情,也许你应该考虑改变你的程序的结构。您将函数定义为纯虚函数并且在必须具体的派生类中不需要它,这意味着程序设计得不好。无论如何,如果您仍然想从derived_1 实例化,您可以只为function() 提供一个空实现,这应该可以工作。但我的建议是,您可能需要更多的接口。让base没有函数function,而是在另一个接口中定义它,让derived_2继承derived_1,同时实现包含函数function的接口。

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多