除了赋值运算符,C++中的哪些运算符不会被继承?
我难以理解这样的:除了赋值运算符,C++中的哪些运算符不会被继承?
众所周知的是赋值运算符不会直接继承了......我已经问过这个昨天LINK
AFAIK以下非虚拟运营商不会继承,以及:
operator& //unary user defined
operator* //unary user defined
所有其他运营商将被继承(纠正我,如果我错了)
哪个虚拟运营商不会被继承? (虚拟说明符有什么区别?)
严格地说,一切都是遗传的。然而,以下将通过隐含声明的形式隐藏在派生类(或用户声明的版本中,如果用户声明他们):
- 默认构造方法:
T()
- 析构函数:
~T()
- 复制构造:
T(T const &)
(有时没有const
) - 拷贝赋值运算符:
T & operator=(T const &)
(有时没有const
) - 移动构造函数:
T(T &&)
- 布展赋值运算符:
T & operator=(T &&)
operator&
和operator*
继承和其他事物一样。 virtual
声明没有区别。
谢谢。如果我明白:隐藏的意志也将是:assigment operator,move assigment,move copy ctor。那是对的吗? – codekiddy 2012-01-15 15:01:51
@codekiddy:是的,当你评论时我只是添加它们(我的C++ 11知识有点粗略,所以我必须仔细查看它)。 – 2012-01-15 15:09:24
虚拟关键字应用于方法时,意味着子类可以选择是否覆盖它们。如果他们不这样做,超类的行为将在子类上调用该方法时执行。
如果虚拟方法是纯粹的,那么需要子类来覆盖它。没有默认行为,他们可以依靠。
“通过超类指针或引用*在子类” - *上调用该方法时“。 – 2012-01-15 14:42:26
我已阅读书在C++的思考,在第14章下面的行中提到
除了赋值运算符,运营商自动 继承到派生类。
所有成员函数都是继承的,不管它们是否为运算符重载。 'operator ='的特殊之处在于,无论是隐式声明还是用户声明,它都将被派生类实现隐藏。如果你有其他理解,我想你可能误解了关联问题的答案。 – 2012-01-15 14:39:55
请注意,大多数二元运算符('+',''''''',''''''''')应该是*函数,而不是方法,因为这将允许无法进行的转换。 – 2012-01-15 14:46:09
谢谢Charles和Anton! – codekiddy 2012-01-15 15:09:20