我面临的情况是我需要在父类中访问子成员变量.我知道这是违反OO原则的,但是我必须处理一个场景,其中有数百个类继承自一个类,并且其中一半类停止使用其中一个父变量,并声明并使用它们自己(需要切换)从int到int [],显然这样做的人并未考虑在父类中应用此更改.
一种选择是使用虚拟函数来处理它,但这意味着我必须更改数百个文件/对象中的代码并测试它们中的每一个.因此,我想如果有可能使用一些旧的学校C指针魔术来获取父方法内部的这些变量,这将消除数百个虚函数的需要.
一种选择是使用虚拟函数来处理它,但这意味着我必须更改数百个文件/对象中的代码并测试它们中的每一个.因此,我想如果有可能使用一些旧的学校C指针魔术来获取父方法内部的这些变量,这将消除数百个虚函数的需要.
基本上这就是我想要实现的目标:
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将不起作用.但是,任何设计为继承的类都应该至少有一个虚函数,即使它只是析构函数.)