寻找有关如何改进以下代码以最大限度地重复使用的一些建议。 A类有一个矩阵成员,可用于多种方法。 B类与A类相同(方法是直接复制 - 粘贴)但矩阵成员是不同的并且是不同类型的。
class A
{
public:
A() { set_matrix(); };
double operator()() { // uses method1 and method2 };
protected:
Matrix_Type_A matrix;
void set_matrix();
double method1() { // uses matrix };
double method2() { // uses matrix };
}
class B
{
public:
B() { set_matrix(); };
double operator()() { // uses method1 and method2 };
protected:
Matrix_Type_B matrix;
void set_matrix();
double method1() { // uses matrix. Identical to method1 in class A };
double method2() { // uses matrix. Identical to method2 in class A };
}
理想情况下,我想重新使用类方法,其中底层代码适用于两种矩阵类型。
我最初的想法是创建一个具有新成员 matrix 的子类,但我不认为这会起作用,因为继承的方法仍然指向基类变量,而不是派生变量。例如。像这样的东西:
class A
{
public:
A() { set_matrix(); };
protected:
Matrix_Type_A matrix;
void set_matrix();
double method1() { // uses matrix };
double method2() { // uses matrix };
}
class B : class A
{
private:
Matrix_Type_B matrix;
void set_matrix();
}
或者,我认为我可以使用包含这些方法的通用基类,然后使用不同的矩阵成员继承A类和B类。问题是,基类不会编译,因为方法引用的是仅存在于派生类中的成员。
关于如何构建此建议的任何建议/想法都非常赞赏。
修改:
模板解决方案似乎有效。我已实施以下
template <class T> class A
{
public:
A() { set_matrix(); };
protected:
T matrix;
virtual void set_matrix() = 0;
double method1() { // uses matrix };
double method2() { // uses matrix };
}
class B : class A<Matrix_Type_A>
{
public:
B() { set_matrix(); };
private:
void set_matrix();
};
class C : class A<Matrix_Type_B>
{
public:
C() { set_matrix(); };
private:
void set_matrix();
}
答案 0 :(得分:1)
您如何确保Matrix_Type_A
和Matrix_Type_B
具有相同的方法?如果它们都是声明共享功能的公共父类的子类(或者如果你可以让它们像这样共享父类),只需将matrix
变量声明为该父类型。
如果没有,您可以制作模板类:
template<class Matrix>
class C
{
...
protected:
Matrix matrix;
...
}
并使用C<Matrix_Type_A>
或C<Matrix_Type_B>
作为您的课程。