cstring 对象赋值问题

CString是一个类为什么初始化的时候是CStringaa="test";是这种型式呢,,而不是CStringaa("test");或者CString*aa=newCS... CString是一个类 为什么初始化的时候是
CString aa="test";
是这种型式呢,,而不是 CString aa("test") ;或者 CString *aa= new CString("test");
CString aa="test"; 是怎么来的???
展开
 我来答
啊纯纯纯纯纯纯0Z
2011-06-06 · TA获得超过105个赞
知道小有建树答主
回答量:147
采纳率:0%
帮助的人:128万
展开全部
楼主建议您去看c++中关于构造函数和拷贝构造函数的章节。
那里讲的比较清楚。
这三种形式都是可以的。
不同的是,CString aa("test") ;或者 CString *aa= new CString("test");是调用了构造函数。
而CString aa="test";是操作符重载后调用了拷贝构造函数。
以上只是大概,还是建议花20分钟看下书会比较清楚一点。
kn63vm4sw
2011-06-07 · TA获得超过675个赞
知道小有建树答主
回答量:623
采纳率:0%
帮助的人:390万
展开全部

这个问题是由于你用的是CString没有实例化或者是说没有动态分配内存

声明的三个变量的m_pch指针没有指向任何数据

默认有函数自动分配的默认地址,就像你声明你几个int型的都没有初始化,他们的默认地址都是一样的

你用的是strcpy调用getBuffer来给CString的指针赋值,三个指针指向同一个字符串常量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
maohuiabc
2011-06-06 · TA获得超过197个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:144万
展开全部
这是用的赋值符重载,实际上是隐式的函数调用;
对这个说法更正一下:
实际上VC++6.0将
CString aa="test";
CString aa("test") ;
编译成一样的代码;
而vc++2008已经没有CString aa="test";这种用法;
只能用CString aa=_T("test");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
愚子珍Tg
2011-06-11 · TA获得超过1883个赞
知道小有建树答主
回答量:1827
采纳率:0%
帮助的人:934万
展开全部
s1与s2是两个对象,他们的地址怎么会一样呢,虽然它们的值一样,就像
int a1=3;
int a2=3;
你不能说a1,a2的地址一样,只能说它们的值一样。而且CString的各种运算符号都经过重载的,处理的很特别,像你上面这个例子如果你继续在下面加上一行:
s2=s1;
那么他们的引用地址又是一样的了
可是你接着再加上一行
s1 += "hello";
引用地址又不一样了,s1的m_pchData会指向一个新的位置,s2维持s1原来的位置,s1内容为"hellohello",s2内容依旧"hello"。
所以哪怕有时侯两个CString真的存储在同一个位置你也不要象对待普通的字符串那样对待它,而且永远不要尝试通过获得它的数据地址来更改它的数据,那样很可能造成程序出错,所有的操作都要通过调用CString的成员函数来实现。让CString自己管理它的那份内存
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式