gpt4 book ai didi

c++ - 使用相同方法但不同成员类型构造类的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:08:37 25 4
gpt4 key购买 nike

寻找有关如何改进下面的代码以最大限度地重用的一些建议。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 };
}

理想情况下,我想重新使用类方法,其中底层代码适用于两种矩阵类型。

我最初的想法是创建一个具有新成员矩阵的子类,但我认为这行不通,因为继承的方法仍然指向基类变量,而不是派生类多变的。例如。像这样:

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();
}

最佳答案

你如何确保Matrix_Type_AMatrix_Type_B有相同的方法吗?如果它们都是声明共享功能的公共(public)父类的子类(或者如果您可以让它们共享这样的父类),只需声明您的 matrix变量为该父类型。

如果没有,你可以创建一个模板类:

template<class Matrix>
class C
{
...
protected:
Matrix matrix;
...
}

并使用C<Matrix_Type_A>C<Matrix_Type_B>作为你的类(class)。

关于c++ - 使用相同方法但不同成员类型构造类的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45663331/

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