1
class Base{
public:
float a,b;
};

class Derived:public Base{
public:
int someInteger, otherInt;

void assignNthElement(vector<Base> &myArray,int i){
this=myArray[i-1];//??? How ???
}

void simpleMethodOfAssigningNthElement(vector<Base>&myArray,int i){
a=myArray[i-1].a;
b=myArray[i-1].b;
}


};

myArray から派生クラス内の基本クラスを記述する値を直接コピーする方法は? 「simpleMethodOfAssigningNthElement」のようにやったほうがいいのではないでしょうか?どちらが速いですか?

4

3 に答える 3

1

assignNthElement()コンパイルエラーが発生するため、BaseクラスオブジェクトをDerivedクラスオブジェクトに割り当てることはできません。

逆のことが許可されていることに注意してください。つまり、DerivedクラスオブジェクトをBaseクラスオブジェクトに割り当てることができますが、その場合、派生クラスオブジェクトのメンバーがスライスされてしまいます。この現象はオブジェクトスライシングと呼ばれます。

于 2012-05-11T07:42:14.173 に答える
1

で試している方法では実行できません。assignNthElement実装する必要がありますsimpleMethodOfAssigningNthElement

于 2012-05-11T07:38:02.093 に答える
0

いくつかの C ハックを使用できますが、それは悪い方法です。最善の方法は、simpleMethodOfAssigningNthElement です。operator=必要に応じて、Derivedクラスをオーバーロードできます。

class Base{
public:
float a,b;
};

class Derived : public Base{
public:
    int someInteger, otherInt;

    void assignNthElement(vector<Base> &myArray,int i){
        this = myArray[i-1];// It's OK now
    }

    const Derived & operator=(const Base &base){
        a=base.a;
        b=base.b;
    }

};
于 2012-05-11T07:42:55.260 に答える