如何在派生类中创建与基类同名的函数
How to Create a function with the same name as Base Class in Derived Class
我有如下要求,例如:
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
保持为空
相关文章:
- 虚拟基类函数中派生类的大小
- 无法访问基类函数 C++
- 如何使派生类函数在调用时始终调用相同的基类函数?
- C++虚拟函数:基类函数是调用的,而不是派生的
- Qt基类函数定义
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- C++ - 基类函数指针调用的替代方法
- 什么更有效率?在重载函数中或通过在基类函数中检查对象类型来实现
- 重载基类函数是不好的做法吗?
- 在 qml 中公开基类函数
- 调用基类函数时强制使用类名?
- 如何判断哪个派生的类对象称为基类函数
- 获取具有基类函数的派生类
- 有没有办法从基类函数参数中推断出模板参数
- 私有非虚拟基类函数被称为派生类中的函数
- 模板基类函数成员的别名
- 如何用相同的签名从main调用基类函数
- C++ 如何从 main 调用派生的基类函数
- memcpy派生类到基类,为什么还调用基类函数