gpt4 book ai didi

c++ - 基类对象赋值给派生类对象

转载 作者:行者123 更新时间:2023-11-28 07:37:28 25 4
gpt4 key购买 nike

为什么在以下代码中出现error: no match for ‘operator=’ in ‘y = x’
不能将 b 的 a 分量分配给 a-object = a-object 吗?

struct a {int i;};
struct b : public a {int j;};

int main()
{
a x;
b y;

x.i = 9;
y.j = 5;

y = x; // error: no match for ‘operator=’ in ‘y = x’

// expected: y.i = 9

return 0;
}

最佳答案

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

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;
}

关于c++ - 基类对象赋值给派生类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16477485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com