gpt4 book ai didi

c++ - 更改遗留代码的类层次结构

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:21 25 4
gpt4 key购买 nike

更改已经在软件中使用了很长时间(10 年以上)并且被广泛使用的类的类层次结构是否有任何缺点?我有一个 A 类,它不继承任何东西。我想要做的是让它从一个新的抽象基类继承,并将其当前方法中的 2 个更改为虚拟方法。我通常会去做,但我的同事更不愿意,所以这可能会导致什么问题?谢谢

编辑:我想这样做的原因:

我们正在创建一个新模块,它可以将旧类 A 或新创建的类 B 作为“源”。所以我正在考虑创建一个抽象类 SourceofX 类 A 和 B 将从中继承。“多态性”只会被采用 SourceofX 对象的新类/方法使用。如果你有比这更好的想法,我洗耳恭听

最佳答案

如果您真的认为新结构更好,那么我会接受 Luchian Grigore 所说的,但这不是唯一的选择。例如,您可以使用代理:

struct Base {
virtual void doSomething() = 0;
};

void someFunction(Base &base)
{
...
base.doSomething();
...
}

struct NewClass : Base {
virtual void doSomething();
};

struct OldClassProxy : Base {
OldClassProxy(OldClass &old) : old(old) { }

virtual void doSomething()
{
old.doSomething();
}

OldClass &old;
};

现在您可以将新函数与旧类的实例一起使用,而无需修改旧类:

NewClass a;
OldClass b;
someFunction(a);
OldClassProxy b_proxy(b);
someFunction(b_proxy);

如果需要代理的地方很多,那么可以写一个重载:

void someFunction(OldClass &old_class)
{
OldClassProxy proxy(old_class);
someFunction(proxy);
}

这会让你这样做:

NewClass a;
OldClass b;
someFunction(a);
someFunction(b);

关于c++ - 更改遗留代码的类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623251/

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