为什么C++赋值运算符重载函数不能被继承
1个回答
2016-12-12 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
1、既然是操作符重载,就必然会访问类的私有成员变量,根据类的封装性要求,除了友元函数外,其他任何外部操作都是违规的,所以不能用普通函数来重载操作符。
2、赋值操作符的重载函数在没有显式定义的情况下,编译程序会自动生成,即使类成员变量包含有指针,也会将指针的值给予复制,所以往往会造成多个实例共享一个存储空间的尴尬局面,当最先定义的类被析构后,尚存的实例还在指向已被释放的存储空间,从而造成成员变量的值已经销毁,而该实例还存在的难以接受的现实。
3、赋值函数是构造函数的重载,不是普通的成员函数,不能用对象来调用,该函数只需一个同类型的参数,且以常量、引用的方式出现,而友元函数的参数与被重载的运算符要求的数量一致,比如+,-、*、/等都需要两个参数,这些概念与数学概念类似,而赋值操作符=在数学概念中不是运算符,所以说,运算符重载的友元函数的参数不会低于2个(这些运算符是数学概念中的运算符)。
2、赋值操作符的重载函数在没有显式定义的情况下,编译程序会自动生成,即使类成员变量包含有指针,也会将指针的值给予复制,所以往往会造成多个实例共享一个存储空间的尴尬局面,当最先定义的类被析构后,尚存的实例还在指向已被释放的存储空间,从而造成成员变量的值已经销毁,而该实例还存在的难以接受的现实。
3、赋值函数是构造函数的重载,不是普通的成员函数,不能用对象来调用,该函数只需一个同类型的参数,且以常量、引用的方式出现,而友元函数的参数与被重载的运算符要求的数量一致,比如+,-、*、/等都需要两个参数,这些概念与数学概念类似,而赋值操作符=在数学概念中不是运算符,所以说,运算符重载的友元函数的参数不会低于2个(这些运算符是数学概念中的运算符)。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询