【发布时间】:2021-07-01 07:40:18
【问题描述】:
我有 2 个 C++ 类,它们具有相同的变量类型,并且需要对这些变量执行完全相同的操作。但是,这两个类的变量名和函数名是不同的,因为它们在各自的类中含义不同。
如何在不重复代码的情况下实现这一目标?继承或模板在这里有帮助吗?
这是一个精简的例子。
class A
{
private:
float m;
float n;
public:
float foo() {return m + n};
};
class B
{
private:
float p;
float q;
public:
float bar() {return p + q};
};
在我的例子中,操作和变量比上面的玩具例子更复杂。两个类之间的唯一区别是变量和函数名称。其余的都是一样的。如何在 C++ 中重构它?
【问题讨论】:
-
好吧,你应该自己知道为什么它们首先是分开的。为什么不在两种情况下都使用一个类? (我认为大多数其他解决方案可能会增加不必要的复杂性)
-
如何在不重复代码的情况下实现这一点? -- 代码重复没有问题。如果类型意味着不同的东西,那么类具有相同的布局只是巧合。如果我的有 20 名成员的班级被称为
Car,而另一个偶然有相同 20 名成员的班级,但它是Toaster?顺便说一句,如果您查看一个真实世界的程序,该程序可以有许多“两个成员”类,它们都意味着不同的东西。 -
如果我们知道这些类是什么会很有帮助。
-
使用
std::pair<float,float>作为泛化(respclass Base<T> { std::pair<T,T> y; public: T baz() { return y.first + y.second; }};)怎么样? -
只是为了呼应@PaulMcKenzie,如果它们用于表示不同的事物并用于不同的情况,那么具有相同布局的两种不同类型是没有问题的。如果你真的只想拥有一种类型(假设它叫做
MySingleType),你可以使用typedef MySingleType NameOne;和typedef MySingleType NameTwo;来创建别名,那么你可以使用NameOne和NameTwo,就好像它们是他们自己的一样类型。
标签: c++ oop templates inheritance design-patterns