【发布时间】:2019-09-13 18:41:28
【问题描述】:
class A {
public:
void show() {
cout << "Class A Show"<<'\n';
}
};
class C : public A {
public:
void show() {
cout << "Class C Show" << '\n';
}
};
int main() //first int main()
{
C* a = new C; //line 1
a->show(); //line 2
a = new A(); //line 3
a->show(); //line 4
}
int main() //2nd int main()
{
A* a = new C; //line 1
a->show(); //line 2
a = new A(); //line 3
a->show(); //line 4
}
问题:
在两个int main()中分别输出朗姆时的每一行
错误 “A*”类型的值不能分配给“C*”类型的值
我遇到了一个面试问题,小组询问了上述 2 int mains() 的输出,并询问它是否会产生错误,而不是我们如何忽略该错误。我在编译器上尝试了这段代码,错误出现在 First int main() 的第 3 行,而 2nd int main() 运行时没有出现错误
【问题讨论】:
-
你有什么问题?
-
a的第一个主要类型是C*,因为你不能在那里存储A*,因为C派生自A,反之亦然 -
O 我怎样才能消除这个错误
-
如果问题是如何消除错误,答案是修复代码
-
我们知道每条鲱鱼都是一条鱼,但并非每条鱼都是一条鲱鱼。你有两个班,鱼班和鲱鱼班。 (1) 它们之间的自然关系是什么? (a) Fish 继承 Herring (b) Herring 继承 Fish (c) a 和 b (d) 既不是 a 也不是 b?为什么? (2)给定(1)的答案和这两个陈述
Fish* fish = new Herring; Herring* herring = new Fish;哪个是正确的? (a) 第一个 (b) 第二个 (c) 两者 (d) 都不是?为什么?
标签: c++ class inheritance