-1
struct BaseType
{
    int x1;
    float x2;
};

struct ChildType
{
    int y1;
    float y2;
};

Class Base       
{             
    BaseType  obj;           

    void funcBase(BaseType **ptr)
    {

        *ptr = &obj;                   // When this assignment happens ofcourse obj is of the BaseType as the  LHS ptr is pointing to a BaseType                                            

  Now I want to write a C++ equivalent code of the following 2 algorithmic statements,                                       

        BaseType's obj.x1 = ChildTypes's obj.y1;                       
        BaseType's obj.x2 = ChildTypes's.obj.y1;                  


    }               
};

class Child :: public Base
{
    ChildType obj;  

};   

ベースから子のobj.y1にアクセスし、ベースのobj.x1に割り当てます。

ただし、ベースと子のオブジェクト名は同じ「obj」であることを覚えておいてください。

誰かが親切にこれで私を助けてくれますか?ありがとう。

4

2 に答える 2

2

あなたの質問はやや曖昧ですが、私が収集できることから、あなたはこのようなものが欲しいです:

ChildType* child = dynamic_cast<ChildType*>( &obj );

キャストが成功したと仮定して、タイプのようにをchild指しています。objChildType

型キャストについて詳しくは、こちらをご覧ください。

編集:より良いデザインで代用できるのであれば、このような型キャストは避けるべきだということだけを述べておかなければなりません。おそらく、ここで少しの間、全体的なデザインを再考する必要があります。

EDIT2:最近の編集を踏まえて、サンプルコードのより具体的なブロックを次に示します。

ChildType* child = dynamic_cast<ChildType*>( &obj );
obj.x1 = child->y1;
obj.x2 = child->y2;
于 2012-04-13T05:48:29.917 に答える
1

funcBase()を実装しないChild型のオブジェクトがあり、このオブジェクトでfuncBase()を呼び出し、funcBase()にBase::objではなくChild::objにアクセスさせたいと思います。その場合、私はあなたが子供を次のように定義できると信じています

class Child : virtual public Base
{
    ChildType obj;
    ...
}

仮想継承は通常、菱形継承問題を解決するために使用されますが、この問題を解決するためにも使用できると思います。

私の仮定が正しくない場合は、私を無視してください。

于 2012-04-13T05:49:30.603 に答える