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面向对象查询,不将查询响应计为对象[重复]