2017-01-11 7 views
1

私は基本クラスAと追加のメンバーを追加する派生クラスBを持っていると言います。今私はそれ自身のメンバーに直接アクセスするが、一時的なAオブジェクトを使用してバッチで派生メンバーを割り当てるクラスBのセッター関数を持っていると思います。ここではいくつかのサンプルコードがあります:自分のオブジェクトの '基本部分'に、自分のオブジェクトのようにアクセスできますか?

class A 
{ 
public: 
    int x; 
    int y; 
    A(int arg1, int arg2) 
     : x(arg1), y(arg2) {} 
}; 

class B : public A 
{ 
public: 
    int z; 
    B(int arg1, int arg2, int arg3) 
     : A(arg1, arg2), z(arg3) {} 
    void setB(int arg1, int arg2, int arg3) { 
     /*something here*/ = A(arg1, arg2); 
     this->z = arg3; 
    } 
}; 

//編集 私は質問が本当にないことは明らかではなかったと思います「私はできますか?」むしろ "どうすればいい?"さらに具体的に:私はセットB(作るために/*something here*/の代わりに何を置くことができる)、実際と同じように動作します。

/*something here*/ = A(arg1, arg2);
void setB(int arg1, int arg2, int arg3) { 
    this->x = arg1; 
    this->y = arg2; 
    this->z = arg3; } 
+1

あなたは自分でそれを試してみましたか?私はそれに何の問題も見ません。また、達成したいことを考えてみてください。これは一般的には良い考えではないようです。 – JKreiser

+0

ここでは注意してください。あなたが 'A'を通して' B'オブジェクトを参照することを計画しているならば、それらを使うかもしれない全てのコンテキストで多相型を使って適切な破壊動作を得るために仮想デストラクタを含めることができます。問題。](http://stackoverflow.com/questions/274626/what-is-object-slicing) – jaggedSpire

+0

@ jaggedSpireこの場合、原因の問題をスライスできますか?私はそれができるとは思わないが、多分私は間違っている。 – Brian

答えて

2

自分のオブジェクトの「基本部分」に自分のオブジェクトのようにアクセスできますか?

はい。これは親クラスの完全なインスタンスであり、派生クラスのインスタンス内に存在します。

派生クラスへのポインタまたは参照は、親へのポインタ/参照に変換可能です。

非ポインタ/参照、つまり派生型の値は親にも変換可能ですが、他の値の型を変換するのと同じように、親のサブオブジェクトのコピーを作成します。

今私は直接それ自身のメンバーをaccesesが、一時的なオブジェクトを使用してバッチで得られたメンバーを割り当て、クラスBのためのセッター機能を持っているしたいと思います。

は単にthisまたは親クラス型への間接参照の参照をキャスト:

(A&)*this = A(arg1, arg2); // or 
*(A*)this = A(arg1, arg2); 
1

、あなたはその基本型にthisをキャストし、それが暗黙の代入演算子だ呼び出すことができます

(*((A*)this))= A(arg1, arg2); 
+1

または '* static_cast (this)' – Brian

関連する問題