【发布时间】:2015-09-20 14:24:27
【问题描述】:
我正在开发一个简单的 C++(在 Linux 下)项目,该项目将具有指向对象的指针。我有 A 类、扩展 A 的 B 类和扩展 B 的 C 类。C 类有一个在 A 或 B 中不存在的方法(测试)。
是否有可能有一个指针“p”可以指向 A、B 和 C 类型的对象?我将如何定义该指针?
其次,由于 a.test() 不存在,但 c.test() 存在,我的通用指针 'p' 可以调用 p->test() 吗?这会编译吗?如果在运行时 p 指向 A 类的对象并且我调用 p->test() 怎么办?这是运行时错误吗?
【问题讨论】:
-
查找多态性
-
我查过多态性,大多数网站都在谈论重载。当涉及到继承和指针时,信息并不那么清楚。这很接近:stackoverflow.com/questions/15188894/… 但仍不确定。我混淆了一些东西,这使得它比应有的更难掌握。
-
你见过this吗?
-
您可能已经查找过多态性,但您显然还没有充分理解其含义。根据您的描述,指向
A(即A *类型)的指针可以指向B或C。如果A是一个多态基,那么在C++ 中,它提供了一组可由B或C专门化的虚函数。如果您设计的这样一个类层次结构(特别是基类A)足够好,则不需要强制转换。事实上,需要转换通常表示设计错误。
标签: c++ class casting descendant