如何将子类指针指向基类指针? [复制]
Posted
技术标签:
【中文标题】如何将子类指针指向基类指针? [复制]【英文标题】:How to point the child class pointer to the base class pointer? [duplicate] 【发布时间】: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) 都不是?为什么?
【参考方案1】:
C++ 是一种严格类型的语言,因此您不能将一种类型的值分配给另一种类型的值。指向不同类型的指针是不同的类型。存在可以隐式转换的兼容类型的概念,但指向不同类型的指针不是其中之一。
现在允许将派生类的指针分配给基类的指针。从抽象的角度来看,如果类型 A 的类子对象是类类型 A 的对象。这种分配是类型擦除范式的一部分。但是相反是不可能的,因为A型不是C型。
【讨论】:
以上是关于如何将子类指针指向基类指针? [复制]的主要内容,如果未能解决你的问题,请参考以下文章