【问题标题】:Define the method once to be virtual in the inheritance hierarchy to make polymorphism to work在继承层次结构中定义一次为虚拟的方法以使多态性起作用
【发布时间】:2013-12-18 06:13:05
【问题描述】:

在继承层次结构中将方法定义为virtual 是否足以使多态性起作用。 在以下示例中,Der::f 未定义为 virtuald2->f(); 打印 der2 我正在使用 VS IDE(可能只有它在那里......)

class Base
{
public:
    virtual void f() { std::cout << "base"; }
};
class Der : public Base
{
public:
    void f() { std::cout << "der"; } //should be virtual?
};
class Der2 : public Der
{
public:
    void f() { std::cout << "der2"; }
};

int main()
{
    Der* d2 = new Der2();
    d2->f();
}

【问题讨论】:

  • 是的,但在继承的类中也有 virtual 可能更清楚,即使严格来说,不需要它。

标签: c++ polymorphism virtual-functions


【解决方案1】:

是的,如果您仅在 Base 类中将方法定义为虚拟方法,则多态性将起作用。然而,我在处理一些大型项目时遇到了一个惯例,即总是在派生类的方法声明中重复 virtual 关键字。当您处理大量具有复杂类层次结构(许多继承级别)的文件时,它可能很有用,其中类在单独的文件中声明。这样您就不必在添加另一个派生类时通过查找基类声明来检查哪个方法是虚拟的。

【讨论】:

    【解决方案2】:

    从 Base 继承的所有内容 - 直接或通过多个层将具有虚拟 f() ,就好像在声明 f() 时类声明已明确放置 virtual

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      相关资源
      最近更新 更多