【发布时间】:2017-01-11 00:47:12
【问题描述】:
我有一个基类如下 -
Class Base {
int a;
int b;
someInfo c;
public:
void setInfo(someInfo);
someInfo getInfo();
};
someInfo 定义为 -
struct someInfo{
std::string name;
std::string school;
};
现在我有一个子类如下:
Class child: public Base{
int e;
int f;
someMoreInfo g;
public:
void setInfo(someMoreInfo);
someMoreInfo getInfo();
};
someMoreInfo 结构为 -
struct someMoreInfo{
someInfo i;
int j;
};
现在在实现子类的getInfo() 和setInfo 时,是否需要将基类的相应函数virtual 并在此处覆盖它们?因为每个人都这么说,而我不知道为什么要这样做以及为什么这已经不起作用了,因为两者都是不同的函数集,不同之处在于返回值或参数的值。
对这位困惑的学生的任何帮助将不胜感激:)
【问题讨论】:
-
如果你想要一个成员函数的运行时多态性,它需要是
virtual。 -
和签名必须匹配:返回类型、参数类型及其顺序/限定符在母类和子类之间不能不同。
-
@CaptainObvlious 它发生在对象切片发生时,对吗?但是,如果我得到一个只有基类剩余属性的切片对象,我为什么还要那个
:|。这是我没看懂的,老师也不会直接回答。 -
@hg_git “对象切片时会发生,对吧?” 不是。
-
启动你的编译器,然后试一试。尝试
Base b* = new child().然后尝试使用和不使用virtual 调用这两个函数。这应该花费您 5 分钟。
标签: c++ class oop c++11 inheritance