关于构造函数的成员初始化问题?

arows 2002-07-25 03:42:24
有个String类
Class string{
public:
string(const char* = "");
string(const String &);
~String();
private:
int length;
char *sPtr;
void setString(const char*);
};

当实现构造时的一个函数是这么实现的
String ::string(const String ©):length(copy.length)
{
setstring(copy.sPtr);
}
请问为什么要用:length(copy.length)来设置length,而不是用

length = copy.length
呢?




...全文
37 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wowuyinglingluan 2002-07-26
  • 打赏
  • 举报
回复
初始化式比赋值效率高嘛,看看《C++对象模型》就全明白了。
zheng_can 2002-07-25
  • 打赏
  • 举报
回复
楼主呀楼主
你老是在写 Basic 哪还是 C/C++ 呀
这个 String 一会儿大写,一会儿小写
ganganwen2 2002-07-25
  • 打赏
  • 举报
回复
那个用=号的话,好象编译不同,我以前试过
dajian2000 2002-07-25
  • 打赏
  • 举报
回复
同意效率观点!
the C++ programming Language书中有说!可查阅!
wangran 2002-07-25
  • 打赏
  • 举报
回复
不过我刚才写了一个程序测试了一下,是没有错误的,难道在copy constructor中可以直接调用参数copy的私有成员吗?
wangran 2002-07-25
  • 打赏
  • 举报
回复
不过我刚才写了一个程序测试了一下,是没有错误的,难道在copy constructor中可以直接调用参数copy的私有成员吗?
wangran 2002-07-25
  • 打赏
  • 举报
回复
好象不怎么对吧?length是类string的私有成员,不能直接访问吧?
symbole 2002-07-25
  • 打赏
  • 举报
回复
说得好啊!
arows 2002-07-25
  • 打赏
  • 举报
回复
感谢各位热心人!~v~
langhaixin 2002-07-25
  • 打赏
  • 举报
回复
同意楼上的看法
kof99th 2002-07-25
  • 打赏
  • 举报
回复
效率,如果是一个类,有自己的赋值运算符,构造函数,就会被扩展为现构造一个
类得对象(用构造函数),在用赋值运算符进行赋值。
而使用成员初始化列表,只是调用一次拷贝构造函数就可以了。
详见inside c++ object modal.
fangrk 2002-07-25
  • 打赏
  • 举报
回复
上面说得没错
topikachu 2002-07-25
  • 打赏
  • 举报
回复
一方面是习惯问题。还有就是一般情况下成员用初始化会比赋值效率高--如果成员是个类,那么只需要一次构造,否则就是一次构造加一次赋值;而且有时候只能用初始化--const和引用数据成员。所以几乎所有的教科书都会说尽量用初始化,而不是赋值。
当然这个int变量初始化和赋值的效率应该都差不多,不过养成好习惯总是没错:)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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