麻烦大家看看:一个有关类型转换的问题。

blueyoyoy 2005-01-04 09:22:53
在书上看到的一段程序。说是类中的单参数构造函数具有类型转换的功能,看了解释,不是很明白。贴出来请大家帮忙解释一下呵
class A
{
public:
A() { m = 0; }
A(double i) { m = i; }
void print() { cout<< m << endl; }
private:
double m;
};
void main()
{
A a(5); //此处调用构造函数,有一个隐式的转换
a = 10; //这里的格式转换就看不太明白了,怎么把一个int类型转换成了A类型呢?
a.print();
}

a = 10; //这里的格式转换就看不太明白了,怎么把一个int类型转换成了A类型呢?请大家帮帮忙啊。
...全文
198 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
snow810211 2005-01-04
  • 打赏
  • 举报
回复
我觉得
playmud(把复杂问题简单化)
说得有道理,first调用operator=,然后再匹配
allen_zhaozhencn 2005-01-04
  • 打赏
  • 举报
回复
goodluckyxl(被人遗忘的狗)说得对: 能被系统提升为double类型的类型都能进行隐式转化

a = 10; //这里的格式转换就看不太明白了,怎么把一个int类型转换成了A类型呢?

//上面的代码应该是调用默认的operator=完成一次赋值操作. 1, 产成一个临时对象. 2,调用默认的operator=
xuzheng318 2005-01-04
  • 打赏
  • 举报
回复
A(double i) { m = i; }
系统进行了隐式转换
july81 2005-01-04
  • 打赏
  • 举报
回复
a = 10;//int->double(标准转换),double->temp(a instance of class a) 用户定义转换,然后调 用隐式声明的赋值拷贝函数。。
goodluckyxl 2005-01-04
  • 打赏
  • 举报
回复
A(double i) { m = i; }
//这个构造函数对于能被系统提升为double类型的类型都能进行隐式转化
playmud 2005-01-04
  • 打赏
  • 举报
回复
a = 10;首先是要调用一个默认operator=,他的参数要求是一个&A,于是如 beyondtkl所说的了.
playmud 2005-01-04
  • 打赏
  • 举报
回复
楼上的加上一个拷贝赋值运算符会更完整一些.
beyondtkl 2005-01-04
  • 打赏
  • 举报
回复
我刚看了一下ASM代码 发现确实是这样的。。

楼主可以在 a = 10; 设断点单步跟踪 然后后按F11 会跳到A(double i) { m = i; }
这里来。。
beyondtkl 2005-01-04
  • 打赏
  • 举报
回复
a = 10; //这里的格式转换就看不太明白了,怎么把一个int类型转换成了A类型呢?请大家帮帮忙啊。

先把10-> double

然后调用 A(double i)进行构造一个temp对象 再赋值给a

个人意见。
blueyoyoy 2005-01-04
  • 打赏
  • 举报
回复
谢谢各位的指点。结贴啦
beyondtkl 2005-01-04
  • 打赏
  • 举报
回复
一般不会用的 因为这样看起来比较奇怪 难以理解。。。

我们写代码 不仅要写好 能良好的运行 还要尽量的让人能看的懂。。这就是可读性等等之类的。。
blueyoyoy 2005-01-04
  • 打赏
  • 举报
回复
谢谢大家的解释。也就是说通过这样一种隐式的转换,a = 10也可以定义一个类对象。那么一般在编程中好像不太用这种方法吧。
diandian82 2005-01-04
  • 打赏
  • 举报
回复
对,隐式转换!!

相当于:
a = (A)10.5;
oyljerry 2005-01-04
  • 打赏
  • 举报
回复
最好自己重载operator=

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧