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

时间:2012-02-27 09:43:56

标签: c++ inheritance constructor

我的要求如下:

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 Creator 操作系统:Ubuntu 10.10 编译:GCC(X86)

1 个答案:

答案 0 :(得分:1)

具有与基类同名的成员函数是非常差的品味和容易出错(使代码对人类来说不可读)。你确定你无法避免吗?

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

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

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

更安全的方法是编写类似

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

但实际上,你应该避免编写这种无意义的。你的代码变得难以理解,即使你在几周内也会受到伤害......

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

您的代码中还有其他错误。即使main保持空白

,它也无法编译