C++ 重写accross类层次结构的成员函数
我定义了一个类a,并从a派生了一个新的类B。 我在类B中重载了SetData函数。 当我试图使用B的对象访问B类的SetData函数时,编译器不允许这样做。为什么会这样C++ 重写accross类层次结构的成员函数,c++,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 我认为调用SetData2没有任何问题 其
class A{
public :
void SetData();
};
class B : public A {
public:
void SetData(int);
};
B b;
b.SetData() ; // error
我认为调用SetData2没有任何问题
其中,好像您调用b.SetData;然后会有一个错误。在派生类中定义同名的方法时,同名的基类方法将隐藏在派生类中
您可以使用关键字使它们在派生类中可见
天哪,没有错误消息-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
}
我猜你可能会面对什么 错误:未解析的外部符号
按照Pavel Shved的建议编写代码好吧,人们总是可以从读取错误开始。代码看起来是有效的。请发布准确的错误消息your get.BTW,此处哪个运算符重载?请注意,您在示例代码中所做的操作称为重写。如果你想研究这个主题,google overload override.hi我在这里重载了函数而不是运算符..代码是函数重载的,因为第二个函数的参数是int。。
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
}