【发布时间】:2018-03-20 11:57:03
【问题描述】:
我在方法中使用从基类继承的不同类的一些对象。现在我遇到的问题是,当对象在其继承结构中具有特定类时,我不希望执行该方法。
(伪)代码示例如下所示:
class A {};
class B : A {};
class C : A {};
class D : B {};
class E : C {};
void method(A* _object)
{
// If _object is of type C
// return;
// else do sth
}
我已经检查了this 问题,但这对我没有帮助,因为如果我正确理解其中一个答案,返回的名称取决于编译器。
编辑:因为有一些答案我应该重新考虑我的程序结构,我意识到重要的是要提到我没有洞察力,也没有真正的机会改变基类的结构,因为我我正在使用第三方库,我在这里提到的方法是来自这些基类之一的虚拟方法。因此,如果您遇到类似的问题,接受的答案是好的,但如果您有一个不依赖第三方库的程序,最好重新考虑结构并像他的 Petar Velev 中描述的那样做某事回答。
【问题讨论】:
-
如果你按值获取你的对象,你有切片并且只有
A,即使你传递了C。 -
A _object始终是A类型。也许你想要一个引用或指针?如果是这样,dynamic_cast就是答案 -
如果
A是多态的,可以使用虚方法/dynamic _cast。 -
“现在我遇到了问题……” 这通常是设计缺陷的明确指标。你应该考虑一下。
-
使
do_sth()成为A中的虚函数。在C类中添加一个不执行任何操作的版本。
标签: c++ inheritance