单选题已知将运算符“+”和“*”作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于(  )。A c1.operator*(c2.operator+(c1))B c1.operator+(c2.operator*(c1))C c1.operator*(c1.operator+(c2))D c2.operator+(c1.operator*(c2))

题目
单选题
已知将运算符“+”和“*”作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于(  )。
A

c1.operator*(c2.operator+(c1))

B

c1.operator+(c2.operator*(c1))

C

c1.operator*(c1.operator+(c2))

D

c2.operator+(c1.operator*(c2))


相似考题
参考答案和解析
正确答案: C
解析:
运算符“+”和“*”都是二元运算符,作为成员函数重载时,形参个数比操作数个数少一个,且顺序不能颠倒。重载运算符“*”时,c2为第一操作数;重载运算符“+”时,c1为第一操作数;因此表达式“c1+c2*c1”等价于“c1.operator+(c2.operator*(c1))”。
更多“已知将运算符“+”和“*”作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*”相关问题
  • 第1题:

    ( 14 )下列有关运算符函数的描述中,错误的是

    A )运算符函数的名称总是以 operator 为前缀

    B )运算符函数的参数可以是对象

    C )运算符函数只能定义为类的成员函数

    D )在表达式中使用重载的运算符相当于调用运算符重载函数


    正确答案:C

  • 第2题:

    已知类X成功地重载了- -、+、=、[ ]这几个运算符。则其中肯定属于成员函数的运算符是:

    A.前置- -和[ ]

    B.=和[ ]

    C.[ ]和后置- -

    D.+和=


    正确答案:B
    解析:赋值运算符=和运算符[]只能作为成员函数重载,而- -,+则没有限止。

  • 第3题:

    多数运算符既能作为类的成员函数重载,也能作为类的非成员函数重载,但运算符[]只能作为类的______函数重载。


    正确答案:成员
    成员 解析:此题考查的是运算符重载。在C++中,“=”、“[]”、“()”、“->”以及所有的类型转换符只能作为成员函数重载,不能重载为友元函数。

  • 第4题:

    运算符“+”允许重载为类成员函数,或者非成员函数。若用operator+(c1,c2)这样的表达式来使用运算符“+”,应将“+”重载为【 】 函数。


    正确答案:非成员
    非成员 解析:“+”是一个二元运算符,当它作为成员函数重载时形参表中只有一个参数,对应于第二操作数,而第一操作数就是对象本身,以this指针的形式隐藏在形参表中。而当“+”作为非成员函数重载时,两个操作数都出现在形参表中。

  • 第5题:

    为类Matrix重载下列运算符号时,只能作为Matrix类成员函数重载的运算符是( )。

    A.+

    B.=

    C.<<

    D.++


    正确答案:B
    B。【解析】赋值运算符只能作为重载函数的成员函数,其他运算符都可以作为友元函数重载。

  • 第6题:

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

    A.a.operator++(1)

    B.operator++(A)

    C.operator++(a,1)

    D.a.operator++()


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

  • 第7题:

    使用VC6打开考生文件夹下的工程test38_3。此工程包含一个test38_3.cpp,其中定义了类complex,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。

    (1)添加类complex的无参数的构造函数的定义,将私有成员real和imag都初始化为0。请在注释“//**1**”之后添加适当的语句。

    (2)添加类complex的带两个参数的重载构造函数,两个参数r和i都是double类型,要求将r赋值给私有成员real, i赋值给私有成员imag,同时允许调用时参数i可是省略,请在注释“//**2**”之后添加适当的语句。

    (3)完成类complex重载加法函数的定义,该函数直接返回一个类complex的对象,同时把参数对象c的实部real和虚部imag分别与当前对象对应部分分别相加,请在注释“//**3**”之后添加适当的语句。

    (4)完成类complex的友元函数print的定义,使其以格式“real+imagi”输出,请在注释“//**4**”之后添加适当的语句。

    源程序文件test38_3.cpp清单如下;

    include <iostream.h>

    class complex

    {

    public:

    // ** 1 **

    // ** 2 **

    {

    real=r;imag=i;

    }

    complex operator+(complex & c);

    friend void print(complex &c);

    private:

    double real,imag;

    };

    complex complex::operator+(complex & c)

    {

    // ** 3 **

    }

    // ** 4 **

    cout<<c.real<<"+"<<c.imag<<"i"<<endl;

    }

    void main( )

    {

    complex c1(2.0,3.0),c2(4.0,-2.0),c3;

    c3=c1+c2;

    print(c3);

    c3=c3+complex(3.5);

    print(c3);

    }


    正确答案:(1) complex( ) {real=imag=0; } (2) complex(double r double i=0) (3) return complex(real+c.realimag+c.imag); (4) void print(complex &c)
    (1) complex( ) {real=imag=0; } (2) complex(double r, double i=0) (3) return complex(real+c.real,imag+c.imag); (4) void print(complex &c) 解析:主要考查考生对于类的构造函数重载、缺省参数的设置、运算符的重载和友元函数的定义的掌握,其中(2)使用了参数赋初值的方式使得带两个参数的构造函数可以省略后一个参数,这是一种重要的方法,(3)直接返回类的一个使用带两个参数的构造函数生成的临时对象,这是把运算符重载为类的成员函数时经常使用的方式,(4)友元函数应该在类内声明,类外定义.调用时和普通函数—样,这—点要切记。

  • 第8题:

    前置自增运算符++重载为类的友元函数的形式为【 】,重载为类的成员函数的形式为【 】。 (设类为A,类对象为a)


    正确答案:friend A operator++(A &) a. operator++().
    friend A operator++(A &) a. operator++().

  • 第9题:

    在C++中,如果在类中重载了函数调用运算符(),那么重载函数调用的一般形式为:()

    • A、(表达式)对象
    • B、(表达式表)对象
    • C、对象(表达式)
    • D、对象(表达式表)

    正确答案:D

  • 第10题:

    单选题
    在C++中,如果在类中重载了函数调用运算符(),那么重载函数调用的一般形式为:()
    A

    (表达式)对象

    B

    (表达式表)对象

    C

    对象(表达式)

    D

    对象(表达式表)


    正确答案: D
    解析: 暂无解析

  • 第11题:

    单选题
    为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是(  )。
    A

    +

    B

    =

    C

    <<

    D

    ++


    正确答案: B
    解析:
    在C++中,运算符“=”、“[]”、“()”、“->”以及所有的类型转换运算符只能作为成员函数重载。

  • 第12题:

    单选题
    下列关于赋值运算符“=”重载的叙述中,正确的是(  )。
    A

    赋值运算符只能作为类的成员函数重载

    B

    默认的赋值运算符实现了“深层复制”功能

    C

    重载的赋值运算符函数有两个本类对象作为形参

    D

    如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符


    正确答案: C
    解析:
    A项正确,赋值运算符“=”只能作为成员函数重载;B项错误,默认的运算符只实现了“浅层赋值”,若要实现“深层复制”,必须重载赋值运算符;C项错误,默认的赋值操作就是同类对象之间对应成员的逐一赋值,而常见的真正需要重载赋值运算符的情况是:类中包含指向动态空问的指针;D项错误,一个类如果需要重载运算符=,通常也就需要定义自己特有的复制构造函数,反之亦然。

  • 第13题:

    ( 24 )下列关于运算符重载的描述中,错误的是

    A )可以通过运算符重载在 C++ 中创建新的运算符

    B )赋值运算符只能重载为成员函数

    C )运算符函数重载为类的成员函数时,第一操作数是该类对象

    D )重载类型转换运算符时不需要声明返回类型


    正确答案:A

  • 第14题:

    运算符函数调用格式的表达式:y/x++与表达式:y.operator/(operator++(x,O))含义相同,由此可看出()。

    A.“/”和“++”都是作为成员函数重载的

    B.“/”和“++”都是作为非成员函数重载的

    C.“/”是作为成员函数重载的,“++”是作为非成员函数重载的

    D.“/”是作为非成员函数重载的,“++”都是作为成员函数重载的


    正确答案:C
    解析:本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1.operator+(c2)与c1+c2含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。所以通过题目给出的两个表达式可看出“/”是作为成员函数重载的,“++”是作为非成员函数重载的。

  • 第15题:

    若要重载+、=、<<、==和[]运算符,则必须作为类成员重载的运算符是

    A.+和=

    B.=和<<

    C.==和<<

    D.=和[]


    正确答案:D
    解析:C++中规定,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。本题正确答案为D。

  • 第16题:

    已知类X成功地重载了- -、=、+、和[]这几个运算符,则其中肯定属于成员函数的运算符是( )。

    A.+和=

    B.[]和后置--

    C.=和[]

    D.前置- -和[]


    正确答案:C

  • 第17题:

    下面是复数类complex的定义,其中作为友元函数重载的运算符“--”的功能是将参数对象的实部减1,然后返回对该对象的引用;请补充完整。

    class complex

    {

    private:

    int real;

    int imag;

    public:

    complex(int r=0,int i=0):real(r),imag(i){}

    void show ()

    {

    cout<<real<<(imag<0?"-":"+")<<imag<<'i';

    }

    ______;

    };

    complex& operator -- (complex &c)

    {

    c.real --;

    return c;

    }


    正确答案:friend complex& operator--(complex&)
    friend complex& operator--(complex&) 解析:本题考核运算符重载的定义。程序要填入的是运算符函数operator--在类complex中的声明,运算符“--”是作为友元函数重载的。根据题目给出的条件,易得到答案。

  • 第18题:

    已知类Ben中将二元运算符“/”,重载为友元函数,若c1、c2是Ben的两个对象当使用运算符函数进行显式调用时,与表达式c1/c2等价的表示为______。


    正确答案:operator/(c1 c2)
    operator/(c1, c2)

  • 第19题:

    下列关于运算符函数的描述中,错误的是( )。

    A.运算符函数的名称总是以0perator为前缀

    B.运算符函数的参数可以是对象

    C.运算符函数只能定义为类的成员函数

    D.在表达式中使用重载的运算符相当于调用运算符重载函数


    正确答案:C
    C。【解析】该题主要考查运算符函数的定义及运算符重载时应注意事项,运算符重载是函数重载的一种特殊情况。

  • 第20题:

    一个双目运算符作为类的成员函数重载时,重载函数的参数表中有【 】个参数。


    正确答案:√
    1 解析:双目运算符(即二元运算符),作为成员函数重载时形参表中只有一个参数,对应于第二操作数,而第一操作数就是对象本身,以this指针的形式隐藏在形参表中。

  • 第21题:

    一个单目运算符作为类的成员函数重载时有()个参数;如果作为独立函数重载,则有()个参数。


    正确答案:0;1

  • 第22题:

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

    a.operator++(1)

    B

    operator++(a)

    C

    operator++(a,1)

    D

    a.operator++()


    正确答案: B
    解析:
    表达式++a中,“++”运算符是一元前缀运算符,作为成员函数重载时,形参个数应该比操作数的个数少一个,即不含形参。

  • 第23题:

    单选题
    运算符函数调用格式的表达式“y/x抖”与表达式“y.operator/(operator++(x,o))”的含义相同,由此可看出(  )
    A

    “/”和“++”都是作为成员函数重载的

    B

    “/”和“++”都是作为非成员函数重载的

    C

    “/”是作为成员函数重载的,“++”是作为非成员函数重载的

    D

    “/”是作为非成员函数重载的,“++”都是作为成员函数重载的


    正确答案: A
    解析:
    运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即y.operator*(z)或者0perator*(y,z);另一种是通过运算符构成表达式,即 y*z。因为“++”运算符既可以作为前缀运算符,又可以作为后缀运算符,所以重载这个运算符时,重载后缀"++”时必须多一个虚拟参数:int。