【发布时间】:2016-01-21 18:29:07
【问题描述】:
class A{
public:
virtual void print() const { cout << "a" << endl; }
};
class B : public A{
void print() const { cout << "b" << endl; }
};
void f(const A& a) {
a.print();
}
int main() {
A* a = new B;
f(*a);
return 0;
}
我应该如何改变这段代码的和平,只有func f的签名和A类的主体,所以它会被打印为“c”,而不需要改变这段代码中的任何其他内容。
编辑: 第一部分是这样的:
class A{
void print() const { cout << "a" << endl; }
};
void f(const A& a) {
a.print();
}
如何添加代码,更改f的签名和A的中等主体,这样字符串“b”就会被打印出来。
第二个问题,如何只改变第一个解决方案中 f 的签名,所以它会被打印出来(对于这两个问题,答案是继承、虚拟和多态。
警告 好的,确切的说法是我们可以更改 f 的签名并添加到 A 类,所以我不确定,但我认为我们不能将“a”更改为“c”。
【问题讨论】:
-
我认为您在将家庭作业复制到帖子时弄错了一些细节。但是,即使您正确复制了作业,但在没有证据的情况下发布作业是不合适的。
-
我认为这些功能应该被标记为虚拟的。否则,您只需将
cout << "a" << endl;更改为cout << "c" << endl; -
你听说过礼貌和错字吗?下面回答的人有。
标签: c++ class inheritance polymorphism virtual