在MyClass 类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充完整。( ) MyClass::operator=(const MyClass rhs){if(this=&rhs)return*this;value=rhs. value;return*this;}

题目

在MyClass 类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充完整。

( ) MyClass::operator=(const MyClass rhs)

{

if(this=&rhs)return*this;

value=rhs. value;

return*this;

}


相似考题
参考答案和解析
正确答案:

更多“在MyClass类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充完整。 ()MyClass: ”相关问题
  • 第1题:

    有如下类定义: classMyClass( public: ____ private: intdata; }; 若要为Myclass类重载流输入运算符>>,使得程序中可以“cin>>obj;”形式输入MyClasS类的对象obj,则横线处的声明语句应为( )。

    A.friendistream&operator>>(istream&is,MyClass&a);

    B.friendistream&operator>>(istream&is,MyClassa);

    C.istream&operalor>>(istream&is,MyClass&a);

    D.istream&operator>>(istream&is,Myclassa);


    正确答案:A
    A。【解析】重载输入、输出的声明必须是友元,传入的对象必须是地址,否则操作对象的值是没有意义的。下面是重载输入运算符示例:(Dev-C++)#include<cstdlib>#include<iostream>usingnamespacestd;classMyClass{public:intdata;public:MyClass(intdata);friendistream&operator>>(1stream&is,MyCla-ss&obj);};MyClass::MyClass(iutdata){data=data;}istream&operator>>(istream&is,MyClass&obj){is>>obj.data;returnis;}intmain(void){MyClassobj(12);cin>>obj;eout<<endl;cout<<obj.data;system(”PAUSE”):returnEXIT—SUCCESS;}

  • 第2题:

    在MyClass类的定义中,对赋值运算符=进行重载。请将横线处缺失的部分补充完整。

    ______MyClass::operator=(const MyClass&rhs)

    {

    if(this==&rhs)return*this;

    value=rhs.value;

    return*this;

    }


    正确答案:MyClass&。
    MyClass&。 解析: 本题考查“=”运算符的重载。运算符“=”的重载需要注意:返回值应声明为引用,函数体中总是用语句return*this;返回;如果参数被声明为指向同类对象的引用妨指针,应判别所指向的对象是否与被赋值对象为同一对象,如果是则不做任何处理;如果被赋值对象占用了动态空间,应选释放这些资源,以便接收新的资源,如果参数被声明为指针成引用,通常应加上const修饰;一个类如果需要重载运算符=,通常也就需要定义自身特有的复制构造函数,反之亦然。

  • 第3题:

    若为类MyClass重载运算符+,下列声明中错误的是?

    A.friend MyClass operator+(double, double);

    B.friend MyClass operator+(double, MyClass);

    C.friend MyClass operator+(MyClass, double);

    D.friend MyClass operator+(MyClass, MyClass);


    friend MyClass operator+(double, double);

  • 第4题:

    已知如下程序的输出结果是23,请将画线处缺失的部分补充完整。 include using namespac

    已知如下程序的输出结果是23,请将画线处缺失的部分补充完整。

    include <iostream>

    using namespace std;

    class MyClass {

    public:

    void Print() const { cout << 23; }

    };

    int main() {

    MyClass* p = new MyClass();

    【 】.Print();

    return 0;

    }


    正确答案:(*p)
    (*p) 解析:本题考查的知识点是:成员函数的调用。通过对象调用成员函数使用“.”运算符,而通过对象的指针调用成员函数则是用“->”运算符。本题中,Print()函数之前已经有一个“.”了,所以这里要填入的是一个对象。但题目中只定义了一个 MyClass类的指针p,所以此处应填入将指针转化为指针所指对象的表达式(*p)。

  • 第5题:

    在MyClass类的定义中,对赋值运算符二进行重载。请将画线处缺失的部分补充完整。【 】MyClass::operator=(const MyClass& rhs)

    {

    if(this==&rhs)return *this;

    value=rhs.value;

    return *this;

    }


    正确答案:MyClass&
    MyClass& 解析:本题考查“=”运算符的重载。赋值运算符=的重载应注意以下几点:
    ①返回值应声明为引用,而函数体中总是用语句return *this;返回;
    ②如果参数被声明为指向同类对象的引用或指针,应判别所指向的对象是否与被赋值对象为同一对象,如果是,立即返回,不做任何赋值处理:
    ③如果被赋值对象占用了动态空间或其他资源,应首先释放这些资源,以便接收新的资源;
    ④如果参数被声明为指针或引用,通常应加上const修饰;
    ⑤如果参数被声明为指针,应判别是否为空,以便做出特殊处理:
    ⑥一个类如果需要重载运算符=,通常也就需要定义自身特有的拷贝构造函数,反之亦然。
    由此可见,本题应填入MyClass&。