问问题
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 回答