回首忘路 2016-05-27 17:25 采纳率: 100%
浏览 1554
已采纳

string类问题,为什么赋值调用构造函数

最近在学自实现string类,为什么mystring s;s=“china”;第二句调用的是构造函数?

  • 写回答

6条回答 默认 最新

  • oyljerry 2016-05-28 00:46
    关注

    第一句是调用的构造函数。这样对象实例s已经构造好了。第二句是调用的operator =来进行数据赋值,这个不属于构造函数。mystring s = "asss"; 这样就是调用的拷贝构造函数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • threenewbee 2016-05-27 19:23
    关注

    C++就是这么规定的。如果说构造函数只有一个参数,也可以用等号。
    也就是s = "china";相当于s("china");

    评论
  • 回首忘路 2016-05-28 00:28
    关注

    刚才实验了一把,说法并不是很准确,我重载了构造函数,mystring::mystring(char* str,int len);
    使用mystring s2;s2={"hellow",6};也会调用构造函数,并不是只有一个参数时才会调用。
    不明白为什么用对象初始化和赋值时,要分拷贝构造和赋值重载。而用参数表初始化和赋值时,为什么没有分别,都用的是构造函数。
    求高手解答,可能问的问题不对,百度不到图片说明

    评论
  • ClouddRenn 2016-05-28 02:41
    关注

    这个字符串C++还有C还有java有区别啊
    //C++
    string s1="123";
    string s2="123;//这两个s1,s2并不是同一个地址
    //C
    char *p1="123";
    char *p2="123";//这两个是一个地址
    //Java
    string s1,s2;
    s1="123";
    s2="123";//这两个也是同一个地址

    评论
  • 回首忘路 2016-05-28 04:35
    关注

    谢谢各位,现总结如下(编译器gcc)
    1 mystring s;
    2 s="china";
    第一句调用构造函数,构造一个空对象。
    第二句调用赋值重载'operator =',根据编译器提示,操作数可以是①mystring对象,也可以是②大括号括起来的初始化列表。这里是②。
    通过调试,可以看出第二句分为2个步骤,
    1).调用构造函数,构造一个临时变量
    mystring temp("china");
    2).调用赋值重载函数'operator ='
    s=temp;

    评论
  • RoidCoder 2016-09-15 11:07
    关注

    不错啊,学得挺深入的

    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 易语言编写cs.16 绘制 矩阵出现了点问题 不知道这个矩阵可不可以使用
  • ¥15 k210显示failed init to model
  • ¥15 Evil-droid生成的APK手机已经下载但无法建立任务
  • ¥25 c语言韩信点兵的变式
  • ¥15 怎么根据书上的例子完成这个问题呢?
  • ¥15 ECharts 增加Zoom,整行包括右边的Text一起滑动
  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去