0
4

3 回答 3

1

您没有显式定义任何赋值运算符,因此编译器将为每个结构生成自己的默认运算符。编译器的默认赋值运算符 inb将 ab作为输入并将分配两个成员。并且赋值运算符在使用继承时不会自动继承。这就是为什么你不能将 an 传递a给 a b- 没有赋值运算符b将 aa作为输入。如果您想允许这样做,您需要尽可能多地告诉编译器,例如:

struct a
{
    int i;

    a& operator=(const a &rhs)
    {
        i = rhs.i;
        return *this;
    }
};

struct b : public a
{
    int j;

    using a::operator=;

    b& operator=(const b &rhs)
    {
        *this = static_cast<const a&>(rhs);
        j = rhs.j;
        return *this;
    }
};

int main()
{
    a x;
    b y;
    b z;
    ...
    y = x; // OK now
    y = z; // OK as well
    ...    
    return 0;
}
于 2013-05-10T08:11:18.673 回答
0

不,因为即使这些类是相关的,它们也是不同的类型。

想一想,即使它被允许并且会像您预期的那样工作,y.j分配后的价值是多少?

于 2013-05-10T07:52:42.757 回答
0

如错误所述,您需要实现一个赋值运算符。也就是说,一个函数告诉您的程序如何将一个对象分配给另一个对象。如果你在网上搜索,你可以找到很多关于它的信息,例如在http://www.cplusplus.com/articles/y8hv0pDG/

于 2013-05-10T07:53:50.930 回答