如何通过从派生类中复制方法来设置基类字段?

时间:2012-05-11 07:34:56

标签: c++ inheritance

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复制描述派生类中Base类的值? 也许最好像在“simpleMethodOfAssigningNthElement”中那样做? 哪个更快?

3 个答案:

答案 0 :(得分:1)

您无法按照assignNthElement的方式进行操作,只需像simpleMethodOfAssigningNthElement那样实施。

答案 1 :(得分:1)

您无法将基类对象分配给Derived类对象,如assignNthElement()中那样会导致编译错误。

请注意,允许反向,即:您可以将Derived类对象分配给Base类对象,但最终会将派生类对象的成员切片。这种现象称为对象切片

答案 2 :(得分:0)

你可以使用一些C-hacks,但这是不好的方法。最好的方法是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;
    }

};