代码之家  ›  专栏  ›  技术社区  ›  Chris Tonkinson

遗传多态性在C++中的多态性

  •  0
  • Chris Tonkinson  · 技术社区  · 15 年前

    也许我对遗传和多态性的了解并不是我想象的那样。有人能发光吗?

    设置(问题的琐碎化):

    class X {
    };
    
    class Y {
    };
    
    class Base {
      public:
        void f( X* ) {}
    };
    
    class Child: public Base {
      public:
        void f( Y* ) {}
    };
    

    问题:这应该有效,对吧?

    int main( void ) {
      X* x = new X();
      Y* y = new Y();
      Child* c = new Child();
      c->f( x );
      c->f( y );
      return 0;
    }
    

    我得到错误(GCC4.4)的调子:

    `no matching function for call to 'Child::f(X*&)'`
    `note: candidates are: void Child::f(Y*)`
    
    3 回复  |  直到 15 年前
        1
  •  9
  •   Brian R. Bondy    15 年前

    这个 virtual 关键字在这里对您没有帮助。

    你的基类 Base::f 正在被派生类型隐藏。您需要执行以下操作:

    class Child: public Base {
      public:
        using Base::f;
        void f( Y* ) {}
    };
    

    Parashift goes into more detail .

        2
  •  2
  •   sbi    15 年前

    派生类' f() 兽皮 基类 F-() . 你可以通过明确的 Base::f() 到派生类的作用域:

    class Child: public Base {
      public:
        using Base::f;
        void f( Y* ) {}
    };
    
        3
  •  0
  •   Community gview    7 年前

    已在以下位置回答:

    Why does an overridden function in the derived class hide other overloads of the base class?

    在派生类上声明方法时,它会从基类中隐藏任何同名的方法。