Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在派生类中创建与基类同名的函数_C++_Inheritance_Constructor - Fatal编程技术网

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

C++ 如何在派生类中创建与基类同名的函数,c++,inheritance,constructor,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

我有如下要求,例如:

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;
}
类基
{
公众:

Base(){cout具有与基类同名的成员函数的味道极差,而且容易出错(使代码对人类来说无法读取)。您确定无法避免吗

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

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

   (static_cast<Der*>(ptr))->Base();
(static_cast(ptr))->Base();
一种更安全的方法可能是编写如下代码

  { Der* derptr = dynamic_cast<Der*>(ptr);
    if (derptr) 
       derptr->Base(); 
  }
{Der*derptr=dynamic_cast(ptr);
if(derptr)
derptr->Base();
}
但实际上,你应该避免编写这种毫无意义的代码。你的代码正在变得不可读,这甚至会在几周内伤害到你


别忘了用
g++-Wall-g
编译代码(不断改进,直到没有编译警告)使用
gdb
调试器来调试它。别忘了用
HI Basile结束你的输出语句,谢谢你的快速回复。这解决了我的问题。但我不认为它解决了你的误解…你真的应该避免。如果这是一个家庭作业,它应该因为误解而得到一个坏分数,然后噗r编码约定(使您的代码无法阅读,甚至对您的老师也是如此)。再次感谢。我确实遵循了编码约定,因此我从未遇到过这种情况。为什么您必须使用与超级类相同的名称命名成员函数?这非常令人困惑。