c++ - 继承和方法重载

标签 c++ inheritance overloading overriding

为什么 C++ 编译器会出现这个错误?为什么我可以从 B 访问 lol(),但不能访问 rofl() [没有参数]。问题在哪里?

class A
{
public:
   void lol(void) {}
   void rofl(void) { return rofl(0);}
   virtual void rofl(int x) {}
};

class B : public A
{
public:
   virtual void rofl(int x) {}
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
   a.lol();
   a.rofl(1);
   a.rofl();

   B  b;
   b.lol();
   b.rofl(1);    
   b.rofl(); //ERROR -> B::rofl function does not take 0 arguments


   return 0;
}

最佳答案

B::rofl(int)“隐藏”A::rofl()。为了使 Arofl 重载,您应该将 B 声明为 using A::rofl; .

class B : public A {
public: 
    using A::rofl;
    ...
};

这是 C++ 的一个明智之举:它警告您可能还需要覆盖 B 中的 A::rofl() 方法。要么你这样做,要么你明确声明你使用 A 的其他重载。

关于c++ - 继承和方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973976/

相关文章:

c++ - 如何在 C++ 上检测 Windows 是 32 位还是 64 位?

c++ - 为什么我的析构函数没有被调用?

C++如何调用父类的友元函数?

java - 为什么在这种情况下使用接口(interface)而不是抽象类?

c#-4.0 - .NET 4.0 中方法重载和协变的重大变化

delphi - 没有带有这些参数的重载版本 - 具有读/写属性的 var param

Android:使用 NDK 构建 native GUI 应用程序?

python - Cython:C++ 在字典中使用 vector ?

javascript - 如何在 JavaScript 中重写私有(private)方法?

kotlin - Kotlin函数重载(varargs与单个参数)