gpt4 book ai didi

c++ - 访问父类中的子成员,C++

转载 作者:可可西里 更新时间:2023-11-01 18:26:49 31 4
gpt4 key购买 nike

我面临这样一种情况,我需要访问父类中的子成员变量。我知道这违反了 OO 原则,但我必须处理这样一种情况:数百个类继承自一个类,并且其中一半停止使用其中一个父变量,并声明并使用它们自己的(需要切换从 int 到 int[] 并且显然这样做的人没有考虑在父类中应用此更改)。

一种选择是使用虚函数来处理它,但这意味着我必须更改数百个文件/对象中的代码并测试它们中的每一个。因此我想,如果可以使用一些老派的 C 指针魔术来访问父方法中的 this 变量,这将消除数百个虚函数的需要。

基本上这就是我想要实现的目标:

class Parent
{
void DoSomething()
{
// This is what I need
childMember = 0;
}
}

class Child1 : Parent
{
int childMember;
}

class Child2 : Parent
{
int childMember;
}

请让我知道这是否可能。如果是,我该如何实现。
欢迎其他建议,但请记住,我只想在父类中进行更改。
TIA。

最佳答案

唯一干净的方法是使用虚函数方法。

如果 Parent 类至少有一个虚函数(不一定是 DoSomething),还有一种令人讨厌的方法:

void DoSomething() {
if (Child1* child = dynamic_cast<Child1*>(this)) {
child->childMember = 0;
} else if (Child2* child = dynamic_cast<Child2*>(this)) {
child->childMember = 0;
} // and so on, and so forth
}

(如果 Parent 没有虚函数,那么 dynamic_cast 将不起作用。但是,任何设计为继承自的类都应该至少有一个虚函数,即使它只是析构函数。)

关于c++ - 访问父类中的子成员,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7190952/

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