我的要求如下:
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)
答案 0 :(得分:1)
具有与基类同名的成员函数是非常差的品味和容易出错(使代码对人类来说不可读)。你确定你无法避免吗?
一个常见的约定是让类名以大写字母开头,成员函数以小写字母开头。如果你遵循这个惯例,你就不会像你一样受伤!
如果你真的坚持,你可以尝试
(static_cast<Der*>(ptr))->Base();
更安全的方法是编写类似
的代码 { Der* derptr = dynamic_cast<Der*>(ptr);
if (derptr)
derptr->Base();
}
但实际上,你应该避免编写这种无意义的。你的代码变得难以理解,即使你在几周内也会受到伤害......
不要忘记使用g++ -Wall -g
编译代码(改进它直到没有编译警告)并使用gdb
调试器进行调试。不要忘记使用<< endl
结束输出语句。
您的代码中还有其他错误。即使main
保持空白