c++为什么可以对类的对象赋值

夜月岛 2010-03-20 11:06:21
类的对象为什么可以直接赋值(不是指调用构造函数)?即使不重载函数(运算符)
比方说一个类a
a b=77
然后类a中的所有定义的数据类型都被赋值为77,还有返回值*this也被赋值为77,是这样吗?
我不懂到问题都说不太清了。。。
重载运算符真是XX,为什么还可以在自己的类中创建自己???
...全文
192 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2010-03-22
  • 打赏
  • 举报
回复
你要么重载了=,要么有拷贝构造函数
Thestrongants 2010-03-22
  • 打赏
  • 举报
回复
有一个带int的参数构造函数
  • 打赏
  • 举报
回复
哦,原来是这样的哦!
yuzl32 2010-03-22
  • 打赏
  • 举报
回复
比方说一个类a
a b=77
--------------
上面式子成立,一般是因为类a存在一个构造函数a(int i).所以上面等效于:a b(77)
zh1369 2010-03-22
  • 打赏
  • 举报
回复
隐式类型转换
xtjextje 2010-03-22
  • 打赏
  • 举报
回复
1 调用的是带int里的构造函数, 并不是拷贝构造函数.
cattycat 2010-03-20
  • 打赏
  • 举报
回复
构造函数前加上explicit关键字,就不会发生隐式类型转换了。
百度或Google一下explicit吧
elst5523183 2010-03-20
  • 打赏
  • 举报
回复
a b=77; // automatic copy constructor.
嘎文 2010-03-20
  • 打赏
  • 举报
回复
C#可以这么做吧,不过C++不行的
AlanBruce 2010-03-20
  • 打赏
  • 举报
回复
逐位拷贝


最好弄个代码试试

呵呵
greatsong 2010-03-20
  • 打赏
  • 举报
回复
a b=77
隐式地调用了拷贝函数
昵称很不好取 2010-03-20
  • 打赏
  • 举报
回复
隐式地调用构造函数了,只要构造函数里的参数类型相同
gogowhy 2010-03-20
  • 打赏
  • 举报
回复
a b=77
然后类a中的所有定义的数据类型都被赋值为77,还有返回值*this也被赋值为77,是这样吗?

//NO,你弄个测试代码来看看,证明下你的说法
ShineShineRedStar 2010-03-20
  • 打赏
  • 举报
回复
#include "stdafx.h"

#include <iostream>
class A
{
public:
A(int i):a(i){std::cout<<"Constructor";}
private:
int a;
};
int _tmain(int argc, _TCHAR* argv[])
{
A a = 77;
return 0;
}
必须要有构造函数才能直接赋值,这个时候其实是隐式地调用了构造函数。将构造函数注释掉,编译器会报错。
starcat 2010-03-20
  • 打赏
  • 举报
回复
只含一个数据成员的时候才可以用这种方式(=)初始化吧?
真的被楼主说到搞不懂了

cy330206 2010-03-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 camelisi 的回复:]
类有很多隐藏函数,看看C++ primer plus 11章就晓得了
[/Quote]

才看到函数,,感觉有点难懂
camelisi 2010-03-20
  • 打赏
  • 举报
回复
类有很多隐藏函数,看看C++ primer plus 11章就晓得了

64,643

社区成员

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

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