( 33 )将运算符 “ + ” 重载为非成员函数,下列原型声明中,错误的是A ) MyClock operator + (MyClock,long);B ) MyClock operator + (MyClock,MyClock);C ) MyClock operator + (long,long);D ) MyClock operator + (long,MyClock);

题目

( 33 )将运算符 “ + ” 重载为非成员函数,下列原型声明中,错误的是

A ) MyClock operator + (MyClock,long);

B ) MyClock operator + (MyClock,MyClock);

C ) MyClock operator + (long,long);

D ) MyClock operator + (long,MyClock);


相似考题
更多“( 33 )将运算符 “ + ” 重载为非成员函数,下列原型声明中,错误的是A ) MyClock operator + (MyClock,long);B ) MyClock operator + (MyClock,MyClock);C ) MyClock operator + (long,long);D ) MyClock operator + (long,MyClock);”相关问题
  • 第1题:

    下列是重载乘法运算符的函数原型声明,其中错误的是

    A.MyClass operator * (double, double);

    B.MyClass operator * (double, MyClass);

    C.MyClass operator * (MyClass, double);

    D.MyClass operator * (MyClass, MyClass);


    正确答案:A
    解析:本题考查的知识点是:运算符重载。C++把重载的运算符视为特殊的函数,称为运算符函数。运算符重载就是函数重载的一种特殊情况。像对待一般重载函数一样,编译系统能够依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义。本题中的选项A重载运算符“*”使用的形参是两个double,而系统中的“*”运算原本就能计算两个double,所以这违反了重载函数的原则,当执行a*b(a、b的类型均为double)这样的表达式时,系统不知道该执行默认的“乘法”还是用户自定义的运算符重载函数。故答案为选项A。

  • 第2题:

    将运算符“+”重载为非成员函数,下列原型声明中,错误的是( )。

    A.MyClock operator+(MyClock,long);

    B.MyClock operator+(MyClock,MyClock);

    C.MyClock operator+(long,long);

    D.MyClock operator+(long,MyClock);


    正确答案:C
    解析:首先非成员函数一般都是友元函数,相比成员函数第一个操作数是对象本身以this指针的形式隐含在参数列表中,非成员函数调用必须显性的列出参数;选项C中没有MyClock类型,故选C。

  • 第3题:

    下列是重载乘法运算的函数原型声明,其中错误的是

    A.MyClass operator*(double,double);

    B.MyClass operator*(double,MyClass);

    C.MyClass operator*(MyClass,double);

    D.MyClass operator*(MyClass,MyClass);


    正确答案:A

  • 第4题:

    下面重载乘法运算符的函数原型声明中错误的是( )

    A.TestClass operator *(MyClass,double);

    B.TestClass operator *(double,MyClass);

    C.TestClass operator *(double,double);

    D.TestClass operator *(MyClass,MyClass);


    正确答案:C

  • 第5题:

    将运算符“+”重载为非成员函数,下列原型声明中,错误的是( )。

    A.MyClockoperator+(MyClock,long);

    B.MyClockoperator+(MyClock,MyCloek);

    C.MyCloekoperator+(long,long);

    D.MyClockoperator+(long,MyCloek):


    正确答案:C
    C。【解析】非成员函数一般都是友元函数,相比成员函数第一个操作数是对象本身以thiS指针的形式隐含在参数列表中,非成员函数调用必须显式的列出参数;选项C中没有MyClock类型,故选C。

  • 第6题:

    下面是重载为非成员函数的运算符函数原型,其中错误的是

    A.Fraction operator+(Fraction,Fraction);

    B.Fraction operator-(Fraction);

    C.Fraction& perator=(Fraction&,Fraction);

    D.Fraction& operator+=(Fraction&,Fraction);


    正确答案:C
    解析:本题考查的知识点是运算符重载。C++中规定,“=”运算符只能作为成员函数重载,故本题的选项C是错误的。

  • 第7题:

    下列是重载乘法运算符的函数原型声明,其中错误的是( )。

    A.MyClass operator*(double,double);

    B.MyClass operator*(double,MyClass);

    C.MyClass operator*(MyClass,double);

    D.MyClassoperator*(MyClass,MyClass);


    正确答案:A
    解析: 此题考查的是乘法运算符的重载函数原型声明。因为操作的对象是类对象,所以重载函数的参数至少有一个是类对象。故选项A)中两个参数都为double型是错误的。

  • 第8题:

    MyClock为一个类,则指向“MyClock a,* p;”语句时,调用该类构造函数( )次。

    A.1

    B.2

    C.3

    D.4


    正确答案:A
    解析:*p不调用类的构造函数,*p并不定义类对象,而是定义了一个指针指向一个MyClock的对象。

  • 第9题:

    如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。

    A.a.operator++(1)

    B.operator++( )

    C.operator++(a,1)

    D.a.operator++()


    正确答案:D

  • 第10题:

    单选题
    下面是重载为非成员函数的运算符函数原型,其中错误的是(  )。
    A

    Fraction operator+(Fraction,Fraction);

    B

    Fraction operator-(Fraction);

    C

    Fraction& operator=(Fraction&,Fraction);

    D

    Fraction& operator +=(Fraction&,Fraction);


    正确答案: A
    解析:
    C++语言规定,“=”运算符只能作为成员函数重载,不能作为非成员函数重载。

  • 第11题:

    单选题
    下列是重载乘法运算符的函数原型声明,其中错误的是(  )。
    A

    MyClass operator*(double,double);

    B

    MyClass operator*(double,MyClass);

    C

    MyClass operator*(MyClass,double);

    D

    MyClass operator*(MyClass,MyClass);


    正确答案: A
    解析:
    C++已经提供了求两个double型数据乘法的运算符*,不能再定义同样的运算符,编译器不能识别是否执行运算符重载函数。

  • 第12题:

    单选题
    如果表达式y*x++中,“*”是作为成员函数重载的运算符,“++”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为(  )。
    A

    x.operator++(0).operator*(y)

    B

    operator*(x.operator++(0),y)

    C

    y.operator*(operator++(x,0))

    D

    operator*(operator++(x,0),y)


    正确答案: C
    解析:
    运算符函数作为成员函数重载时,第一操作数就是对象本身,并不显式地出现在形参表中;运算符函数作为非成员函数重载时,由于没有隐含的this指针,因此所有的操作数均出现在形参表中。

  • 第13题:

    下列是重载为非成员函数的运算符函数原型,其叶错误的是()。

    A.Fraction operator+(Fraction,Fraction);

    B.Fraction operator-(Fraction);

    C.Fraction&operator=(Fraction&,Fraction);

    D.Fraction&operator+=(Fraction&,Fraction);


    正确答案:C
    由于取负运算符″一″是一元运算符,当作为成员函数重载时参数表中没有参数,那个的操作数以this指针的形式隐藏在参数表中。

  • 第14题:

    将x+y*z中的“+”用成员函数重载,“*”是友元函数重载应写为( )。 A.operator+(operator*(y,z))SX

    将x+y*z中的“+”用成员函数重载,“*”是友元函数重载应写为( )。

    A.operator+(operator*(y,z))

    B.x.operator+(operator*(y,z))

    C.x.operator+(X*(y,z))

    D.x+(operator*(y,z))


    正确答案:B
    B。【解析】在定义了重载运算符后的函数后,函数operator+重载了运算符“+”。如果在类以外的其他地方定义了一个函数,在类体中用friend对该函数进行声明,此函数就称为本类的友元函数。“*”用友元函数重载就是运算符函数不作为成员函数,而把它放在类外,“*”被改写为“operator*”。“+”为成员函数重载,X.operator+。所以“x+y*z”被改写为“x.operator+(operator*(y,z))”。

  • 第15题:

    若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。

    A) operator long()const;

    B) operator long(bigNumber);

    C) long operator long() const;

    D) long operator long(BigNumber);

    A.

    B.

    C.

    D.


    正确答案:A

  • 第16题:

    如果表达式y*x++中,“*”是作为成员函数重载的运算符,“++”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为

    A.x.operator++(0).operator*(y);

    B.operator*(x.operator++(0),y);

    C.y.operator*(operator++(x,0))

    D.operator*(operator++(x,0),y)


    正确答案:C
    解析:本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1,c2都是该类的对象,则c1.operator+(c2)与c1+c2含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。同理,运算符*作为成员函数重载,则y*(x++)与 y.operator*(x++)含义相同,后缀++作为友元函数重载,那么x++与operator++(x,0)含义相同,所以选项 C是正确的。

  • 第17题:

    已知表达式++a中的“++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为

    A.a.operator++(1)

    B.operator++(A)

    C.operator++(a,1)

    D.a.operator++()


    正确答案:D
    解析:在类内部定义重载“++”运算符,函数格式为:类名&operator++( )。因此调用该函数的格式应该为:a.operator++( )。

  • 第18题:

    下列运算符重载函数的原型错误的是( )。

    A.Volume operator-(double,double);

    B.double Volume::operator-(double);

    C.Volume Volume::operator-(Volume);

    D.Volume operator-(Volume,Volume);


    正确答案:A
    解析:运算符重载也是一种函数重载。函数重载要求编译器能够唯一地确定调用一个函数时应该执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。也就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,无法实现重载。选项A重载的减号运算符与C++默认提供的两个double相减运算无法区别。

  • 第19题:

    MyClock 类的拷贝构造函数的声明语句为( )。

    A.MyClock&(MyClock x)

    B.MyClock(MyClock x)

    C.MyClock(MyClock &x)

    D.MyClock(MyClock *x)


    正确答案:C
    解析:拷贝构造函数头的一般形式为:类名>::类名>(const类名>&引用对象名>)。

  • 第20题:

    将前缀运算符“--”重载为非成员函数,下列原型中能正确用于类中说明的是( )。

    A.DeCr&operator--(int);

    B.DeCr operator--(DeCr&,int);

    C.friend DeCr&operator--(DeCr&);

    D.friend DeCr operator--(DeCr&,int);


    正确答案:D
    非成员函数重载用友元函数的形式实现,“--”运算符重载分为前置和后置两种重载方式。用友元函数来实现“--”运算符的重载时,前置“--”运算符的重载的一般格式为:friendoperator--(ClassName&);后置++运算符的重载的一般格式为:friendoperator--(ClassName&,int)。所以答案为D。

  • 第21题:

    单选题
    将前缀运算符“--”重载为非成员函数,下列原型中,能正确用于类中说明的是(  )。
    A

    Deer& operator--(int);

    B

    Deer operator--(Deer&,int);

    C

    friend Deer& operator--(Deer&);

    D

    friend Deer operator--(Deer&,int);


    正确答案: D
    解析:
    前缀运算符“--”的操作结果有左值数据,重载时应保持这一特性。因此运算符函数的返回值应声明为引用,类型为Deer&;前缀运算符“--”要求第一操作数必须是有左值的操作数,因此对应于第一操作数的第一参数必须声明为引用参数,类型为Deer&。

  • 第22题:

    单选题
    将运算符“+”重载为非成员函数,下列原型声明中,错误的是(  )。
    A

    MyClock operator+(MyClock,long);

    B

    MyClock operator+(MyClock,MyClock);

    C

    MyClock operator+(1ong,long);

    D

    MyClock operator+(1ong,MyClock);


    正确答案: C
    解析:
    重载的“+'运算符的两个参数都是long类型,而C++已经提供了求两个long型数据之和的运算符+,编译器无法区分应该调用哪一个。该运算符重载有二义性。

  • 第23题:

    单选题
    若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是()。
    A

    operator long()const;

    B

    operator long(bigNumber);

    C

    long operator long()const;

    D

    long operator long(BigNumber);


    正确答案: A
    解析:
    在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明,CD两项错误。类型转换运算符只能作为成员函数重载,long是一元运算符,形参的个数比操作数个数少一个,因此重载函数无参数。