【问题标题】:c++ polymorphism and virtual functionc++多态和虚函数
【发布时间】:2014-09-11 17:04:13
【问题描述】:

是否可以从 B 调用虚函数 foo(int) 而不使用注释中所做的操作?

class A {
public: 

    virtual void foo ( char * ) {
    }

    virtual void foo ( int ) {
    }
};

class B : public A {
public:

    void foo ( char * ) {
    }

    //void foo ( int i ) {
    //  
    //  A::foo(i);
    //}
};

B b;
b.foo(123); // cannot convert argument 1 from 'int' to 'char *'

【问题讨论】:

  • 请修正缩进.....virtual void foo(int) 的声明乍一看似乎是virtual void foo(char *) 的正文。编译器可能不关心奇怪的格式,但人类会......
  • @AndreKostur FWIW,foo 重载的奇怪缩进是由编辑引入的,而不是由 OP。

标签: c++ inheritance polymorphism


【解决方案1】:

是的,这是可能的。这里的问题是函数B::foo(char*) 隐藏继承函数A::foo(int) 的名称,但您可以使用using 声明将其带回B 的范围:

class B : public A {
public:

    void foo ( char * ) {
    }

    using A::foo;
};

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多