成员函数覆盖整个类层次结构

时间:2009-10-24 08:35:19

标签: c++

我已经定义了一个A类并从A派生了一个新的B类。 我在B类中重载了SetData()函数。 当我尝试使用B的对象访问B类的SetData函数时,编译器不允许它。为什么会这样?

class A{

 public :
       void SetData();    
};

class B : public A {

 public:
       void SetData(int);   
};

B b;
b.SetData() ; // error

3 个答案:

答案 0 :(得分:4)

OMG,没有错误消息。 -1对你而言。

但是让我们使用心灵感应并猜测你的错误信息。你得到类似“找不到符号”的东西,因为你试图调用一个没有正文的函数B::SetData()。它必须有一个身体,即使它什么都不做,即使它在父类中声明!尝试将其添加到班级的正文中

class B : public A {
 public:
       void SetData(int)
       {  /* add body here */ };   
};

在它之外

class B : public A {

 public:
       void SetData(int);   
};
void B::SetData(int)
{
  //write it here
}

答案 1 :(得分:1)

b.SetData(2) ; // error

我在调用SetData(2)时没有看到任何问题。

如果您致电b.SetData() ;,则会出现错误。在派生类中定义具有相同名称的方法时,具有相同名称的基类方法将隐藏在派生类中。

您可以通过using关键字在派生类中看到它们。

class A{

 public :
     void SetData(){}   
};

class B : public A {

 public:

     using A::SetData;
     void SetData(int){}   
};



int main() 
{ 
B b;
b.SetData() ; // error
}

答案 2 :(得分:0)

我想你可能会面对

错误:未解析的外部符号

根据Pavel Shved的建议编写代码