Null値または派生した子を指すオブジェクトポインタのグリッドを持つプログラムで作業しています。このグリッドの値を派生した子のアドレスに設定して、子をグリッドに「配置」し、メモリ内の位置によって子にアクセスできるようにしたいと考えています。同じクラスの代入として、逆参照としての()演算子と=演算子の両方をオーバーロードすることはできますか?
グリッドのインターフェイスの外観を強調します。
class Grid{
public:
virtual int get(g_type) const;
public:
parent* operator() (int,int);
Grid() : _amtCol(10),_amtRow(10)
{construct();}
~Grid() {deconstruct();}
private:
int _amtCol;
int _amtRow;
parent* **_grid;
private:
parent ***meddle(access);
void meddle(access, parent***);
virtual void construct();
virtual void deconstruct();
};
Heres()オーバーロードの外観。私のクラスの残りの部分を作成し、限り継承と構造が行くように動作している
Grid b;
Child c;
Child c2;
b(1,1) = &c;
b(1,4) = &c2;
b(1,1)->foo(); //calls the first Childs foo()
b(1,4)->foo(); //calls the second Childs foo()
:私が行うことができるようにしたいどのような
parent* Grid::operator() (int i,int j){
if(i < get(r_QTY) && j < get(c_QTY)){
return this->meddle(key)[i+1][j+1];
}else{return NULL;}
}
はと私のプログラムの残りの部分の中にこれを呼んでいます。
オーバーロードなどを連鎖させる方法はありますか?
おそらく私は親と子供のクラスで割り当て過負荷を解消する必要があると思っていましたが、うまくいくようです。
///////////////////////////////////////////////////////////////////////////// ///////
アンはさておき、私はこれが実装されています:
んvoid Grid::operator() (int i,int j,parent &cpy){
if(i < get(r_QTY) && j < get(c_QTY)){
this->meddle(key)[i+1][j+1] = &cpy;
}
}
は、この機能が可能になります。
私の論文があります!ありがとう!
////////////速い追加:おそらく、これが道徳的かつ倫理的に公正であるかどうかを必ずしも知る必要はありません。私は機能する機能を実装する方法があります。私は、ライブラリにすでに存在するものを私自身の創作物よりも優先させることを理解していると思いますが、たとえばstd :: vectorを使用するとできないということは可能であるということです。私は、これがどのように可能になったのか、それが言語の構文のどこにあるのだろうと思っています。
無関係に、しかし、あなたはそれが役に立つかもしれませんto [コンストラクタまたはデストラクタで 'virtual'関数を呼び出さない理由を知る](https://stackoverflow.com/questions/962132/calling-virtual-functions-inside-constructors) – Tas
また、[あなたのデストラクタが仮想でなければならない理由](https://stackoverflow.com/questions/1123044/when-should-your-destructor-be-virtual) – PaulMcKenzie
ああ、それは非常に有用な情報です。ありがとう。 – TBurns