如何在派生类中创建与基类同名的函数

How to Create a function with the same name as Base Class in Derived Class

本文关键字:基类 函数 创建 派生      更新时间:2023-10-16

我有如下要求,例如:

class Base 
{
public:
Base() { cout << "Base Class Constructor";}
virtual ~Base() { cout << "Base Class Destructor";}
};
class Der : public Base
{
public:
    Der() { cout << "Der Class Constructor";}
    ~Der() { cout << "Der Class Destructor";}
    void Base() {cout << "Der Class function";}
};
int main(int argc, char* argv[]) 
{
    Base *ptr = new Der();
    ptr->Base(); // throwing error here - "Invalid use of class Base". My intention is to call Der::Base() function. 
    return 1;
}

请任何人建议我如何通过指向Der对象的Base指针调用Der类中声明的函数"void Base()"。

IDE:Qt创建者操作系统:Ubuntu 10.10编译器:GCC(X86)

拥有与基类同名的成员函数是非常糟糕的,而且容易出错(使代码对人类来说不可读)。你确定你不能避免吗??

一个常见的约定是类名以大写字母开头,成员函数以小写字母开头。如果你遵守惯例,你就不会像现在这样受到伤害

如果你真的坚持,你可以试试

   (static_cast<Der*>(ptr))->Base();

一个更安全的方法可能是编码类似的东西

  { Der* derptr = dynamic_cast<Der*>(ptr);
    if (derptr) 
       derptr->Base(); 
  }

但实际上,您应该避免编码这种无意义的。你的代码变得不可读,这甚至会在几周内伤害你。。。

不要忘记使用g++ -Wall -g编译代码(对其进行改进,直到没有编译警告为止),并使用gdb调试器对其进行调试。不要忘记用<< endl结束输出语句。

您的代码中还有其他错误。它不编译,即使main保持为空