OOP识别派生对象[重复]

Posted

技术标签:

【中文标题】OOP识别派生对象[重复]【英文标题】:OOP identify derived object [duplicate] 【发布时间】:2018-09-29 01:50:38 【问题描述】:

我从同一个父类继承了三个类。我有以父类型(典型多态性)作为参数的函数。 如何区分对象的真实类型?谢谢

class Parent
class A : public Parent
class B : public Parent
class C : public Parent

void test(Parent &input)
/*
     how do i know the object is A, B or C?
     I want to perform some operations on the input
     but it's different depends on input's true type.
*/

【问题讨论】:

实现一个虚函数,返回某个对象类型的标识符。 如何解决您的问题在很大程度上取决于语言。所以请选择一种语言。也许是您用于向我们展示的代码 sn-p 的那个? @Someprogrammerdude 我正在使用 C++ 好的,我删除了 Java 标签。为什么添加它? 【参考方案1】:

标准解决方案是多态类的常用解决方案:虚函数!

Parent类中创建一个纯虚函数,在所有子类中重写并实现。然后test 函数只调用这个函数,子类实现可以为自己的类做任何需要和特定的事情。

无需检查类,这几乎总是糟糕设计的标志。

【讨论】:

【参考方案2】:

也许责任链在这里很合适。您将收到的对象传递给子类型链,并让链中的链接决定该对象是否供他们处理,如果不是,他们将继续将对象转发到链中的下一个链接。

【讨论】:

以上是关于OOP识别派生对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将派生对象添加到(抽象)基指针数组中[重复]

将基类转换为派生类[重复]

面向OOP类的PHP MySQLI面向对象查询,不将查询响应计为对象[重复]

Haskell 演示 OOP 设计模式的等价物 [重复]

C#:基类中的受保护方法;无法使用来自另一个类的派生类对象进行访问[重复]

派生参数化ctor的C ++设置值[重复]