複数継承を理解するのに少し苦労しています。どうやら私は多重継承とダイヤモンド問題を持つ非常に複雑な問題を解決することを選択しました。たとえ私が私の問題に似ている2つのケース、例えばthis oneを見つけたとしても、私の質問は実行の順序よりもメモリ上にある。デフォルト以外のコンストラクタを使用した多重継承のメモリ割り当て
は、私は次のようしていると仮定します。私は、デフォルト以外のコンストラクタSymmPosDef
オブジェクトを初期化する唯一の方法を与えているので
class Matrix {
public:
Matrix(int rows, int Cols) {
// Build matrix of zeros
}
};
class Symmetric : public virtual Matrix {
public:
// It's enough to call Matrix constructor using the same number of rows and cols
Symmetric(int size) : Matrix(size, size) {}
};
class PosDef : public virtual Matrix {
public:
// We need different constructor, matrix of zeros is not pos def
PosDef(int size) {
// Build matrix of ones
}
};
class SymmPosDef : public Symmetric, public PosDef {
public:
// We basically want to use the PosDef constructor that gives symmetric matrix
SymmPosDef(int size) : Matrix(size, size), Symmetric(size), PosDef(size) {}
};
を複雑チェーンSymmPosDef(int size) : Matrix(size, size), Symmetric(size), PosDef(size) {}
であり、私の質問は、私がどのように多くの行列を構築していますか?
Symmetric
(同じゼロ要素)に一度、PosDef
に1回、同じスペースを再利用していますか?私はMatrix
に1回スペースを割り当てますか?
行列のサイズが大きくなる可能性があるため、私はできるだけ少ない作業をしたいと考えています。
多重継承を使用しないでください。 –
@ RawNその後、対称性と正定性の関係を扱うための提案はありますか? – rodrigolece
私は自由な関数と構成を言うでしょう。 – Jarod42