C++ 继承时返回值或参数的类型是父类的行为

见以下代码的 base_t& operator=(const base_t& another)。还没有搞清楚。

#include 
#include 

struct base_t
{
	int attr;
	base_t() : attr(233) {}
	base_t& operator=(const base_t& another)
	{
		attr = another.attr;
		return *this;
	}
};
struct descendant_t : public base_t
{
	descendant_t()
	{
		attr = 666;
	}
};

int main()
{
	base_t base;
	descendant_t descendant[2];
	std::cout << std::format("起初,基类是 {0},子类是 {1}, {2}。",
		base.attr, descendant[0].attr, descendant[1].attr) << std::endl;

	base = descendant[0]; // descentant 隐式转换为 base_t。
	std::cout << std::format("基类是 {0}。",
		base.attr) << std::endl;
	base.attr = 233;

	descendant[1].attr = 233;
	// descendant[0] = base; // 编译出错。
	descendant[0] = descendant[1];
	std::cout << std::format("子类是 {0}, {1}。",
		descendant[0].attr, descendant[1].attr) << std::endl;
}

你可能感兴趣的:(编程语言,c++)