#include<iostream.h>
class Sample
{
int x;
public:
Sample(){};
Sample(int a){x=a;}
Sample(Sample &a){x=a.x++ +10;}
void disp(){cout<<"s"<<x<<endl;}
};
void main()
{
Sample s1,s2(20),s3(s2);
s1=s2;
s1.disp();
s2.disp();
s3.disp();
}
结果是 20 21 30
问题是 s1=s2 是怎么赋值的 为啥不能写成s1(s2) 这一块感觉好乱帮忙梳理一下
结果21 21 30 不过貌似我懂了 但还是堆 什么隐式显式转换 不懂 还分什么 一个参数 两个及以上没有缺省参数
C++类型转换构造函数的问题
答案:1 悬赏:80 手机版
解决时间 2021-02-02 13:15
- 提问者网友:溺爱和你
- 2021-02-02 08:47
最佳答案
- 五星知识达人网友:迟山
- 2021-02-02 09:53
Sample s1 = Sample(s2),调用的是Sample(Sample &s)复制构造函数。
Sample s1;
Sample s2;
s1 = s2; 调用的是operator = 方法。
区别在于你要赋值的对象是正在创建还是已创建。
一个对象如果没有生命任何构造方法的话,那么默认会有一个空的构造方法,一个拷贝构造方法,一个=操作符的方法,还有一个析构函数。
Sample s1;
Sample s2;
s1 = s2; 调用的是operator = 方法。
区别在于你要赋值的对象是正在创建还是已创建。
一个对象如果没有生命任何构造方法的话,那么默认会有一个空的构造方法,一个拷贝构造方法,一个=操作符的方法,还有一个析构函数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯