gpt4 book ai didi

c++ - 当类的成员存储为没有此类方法的父类的对象时,如何访问该类的成员?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:12 25 4
gpt4 key购买 nike

我有一个层次结构,例如:

Element
|_Resitance
|_DC Voltage Source
|_AC Voltage Source
|_AC Current Source
|_DC Current Source
|_DynamicElement
| |_Inductor
| |_Capacitor
|_SwitchingDevices
| |_Switch
| |_Diode
.
.
.

因为我的输入可以是其中的任何一个列表,所以它们都被插入到 std::vector<Element*> 中.问题是二极管、开关和电压源有一个我必须访问的 ID 成员。

当我确定 Element 是具有此类成员的子类时,我希望能够运行 *(*Element).ID 或类似的东西。

我真的不想在 Element 类中包含 ID 成员,因为这是经常会发生的事情,并且该类会有很多不合适的成员。

最佳答案

将虚拟析构函数添加到基类并使用dynamic_cast<>派生类访问其成员。 dynamic_cast如果对象不是您转换到的类型的实例并且 dynamic_cast,则按引用将抛出异常通过指针将返回 nullptr同样的情况。

例子:

class Element
{
...
virtual ~Element() = default;
};

...

Element * el = new Diode();
Diode * d = dynamic_cast<Diode *>(el);
if (d) {
// ok, this is diode
}

关于c++ - 当类的成员存储为没有此类方法的父类的对象时,如何访问该类的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54573223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com