2
尋找有關如何改進下面的代碼以最大限度地重複使用的一些建議。 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();
}
這聽起來像一個模板類。 –
避免在構造函數中調用虛方法,您可以使用專用而不是繼承,然後使用別名:'使用B = A;'。 –
Jarod42