【问题标题】:Override two methods at once一次覆盖两个方法
【发布时间】:2015-01-12 01:54:25
【问题描述】:

下面的代码出人意料地在 VS 2012 中编译。

方法 C::f() 覆盖两个基类中的方法。

这是标准行为吗?我查看了 C++11 标准,并没有发现任何明确提及这种情况。

class A { virtual void f() = 0; };

class B { virtual void f() = 0; };

class C : public A, public B { 
  virtual void f() override { } 
};

【问题讨论】:

    标签: c++ c++11 standards standards-compliance


    【解决方案1】:

    Herb Sutter 解释了如何处理这个here

    根据文章:

    class B1 {
      public:
        virtual int ReadBuf( const char* );
        // ...
    };
    
    class B2 {
      public:
        virtual int ReadBuf( const char* );
        // ...
    };
    
    class D : public B1, public B2 {
      public:
        int ReadBuf( const char* ); // overrides both B1::ReadBuf and B2::ReadBuf
    };
    

    这会覆盖具有相同实现的两个函数

    【讨论】:

      【解决方案2】:

      是的。标准说,在 C++11 10.3/2

      如果在类Base 和类Derived 中声明了一个虚成员函数vf,则直接或间接派生自Base,则成员函数vf 与@ 同名[等] 987654325@ 被声明,然后 [...] 它覆盖 Base::vf

      多个基类没有特殊情况,因此在派生类中声明的函数将覆盖所有基类中的合适函数。

      【讨论】:

      • 是的,我阅读了标准中的相同部分,并没有直接说“在所有基类中”,但现在你向我保证。谢谢!
      猜你喜欢
      • 2017-11-05
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多