首页 > 试题广场 >

要求用成员函数重载的运算符是()。

[单选题]

要求用成员函数重载的运算符是()。

  • =
  • ==
  • <=
  • ++
只能使用成员函数重载的运算符有:=()[]->newdelete。
发表于 2018-05-09 21:33:37 回复(1)
直白的说,重载操作符分为类内重载(声明为类的成员函数)和类外重载(声明为普通的非成员函数)。写法上有什么区别?比如要实现把值赋给对象,类内重载操作符要放在对象的右边。而类外重载操作符要放在对象的左边。我们在赋值的时候都是把右侧的内容赋值给左侧,如果写成类外重载就反过来了不符合逻辑习惯,也会造成定义的二义性。因此=()[]->newdelete需要类内实现。
例,实现对象和值的+操作
class CNum         //类内重载
{
public:
    int m_nNum;
    CNum():m_nNum(0){}
    int operator+(int a)        //在Int a左侧有隐藏的参数CNum & *this。
    {
        return this->m_nNum + a;
    }
};
int main()
{
    CNum num;
    num + 123;
}

class CNum         //类外重载
{
public:
    int m_nNum;
    CNum():m_nNum(0){}
};
int operator+(int a, CNum &num)        //类外不可写成int operator+(CNum &num, int a)
{
        return num.m_nNum + a;
}
int main()
{
    CNum num;
    123 + num;
}


编辑于 2020-05-16 12:06:07 回复(3)

C++中运算符操作对象只能是基本数据类型。但实际上,对许多用户自定义类型,比如(类),也需要类似的运算操作,这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。

 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,唯一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下:

〈返回函数类型说明〉operator 〈运算符符号〉(〈参数表〉)「〈函数体〉」

发表于 2018-09-15 21:07:06 回复(0)
1. 参考文章《C++Primer中文版》(第5版)Page493
赋值(=)、下标([])、调用(())和成员访问箭头(->)运算符必须是成员。
2. 参考文章《INTERNATIONAL STANDARD ISO/IEC 14882 Third edition ——Information technology — Programming languages — C++》


发表于 2022-01-21 15:37:43 回复(0)
这是因为位置的原因,类内中隐含一个this指针作为左运算符,类外中重载运算符参数的位置不同容易导致二义性。
发表于 2021-02-03 11:40:03 回复(0)
定义重载运算符,必须首先决定其声明为类的成员函数还是声明为一个普通的非成员函数。在某些时候我们别无选择,因为有的运算符必须作为成员,另一些情况下,运算符作为普通函数比作为成员更好。=、[]、()、->必须是成员。复合赋值运算符一般来说应该是成员,但并非必须
发表于 2020-02-02 20:05:17 回复(0)