1381 次
		
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   回答