返回信息流Stock(const char *co);
Stock::Stock(const char *co)
{
len = strlen(co);
company = new char [len + 1];
strcpy(company, co);
}
为什么使用构造函数的时候
Stock s2= "C++" ;这样就可以
s2 = Stock("C++");这样就不可以啊?
这是一条镜像帖。来源:北邮人论坛 / cpp / #48201同步于 2010/12/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
构造函数小问题
jmg
2010/12/23镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不应该是这样么?
s2 = new Stock("C++");
【 在 jmg (guang) 的大作中提到: 】
: Stock(const char *co);
: Stock::Stock(const char *co)
: {
: ...................
你写的第一个是先构造了一个临时Stock对象,然后把这个临时对象拷贝给了s2,使用的是默认拷贝构造函数...
第二个和第一个同理,但是这里用赋值构造函数,因为对象s2已经存在了...
我觉得是正确的,你用的什么编译器?
【 在 jmg (guang) 的大作中提到: 】
: Stock(const char *co);
: Stock::Stock(const char *co)
: {
: ...................
3楼说的对,我解释错了,呵呵。刚才上机试了一下
第二个应该可以编译通过吧,如果你这么写
Stock s2 = "123";
Stock s3 = s2;//没问题,因为使用的是默认的内存赋值构造函数
--------------------------
Stock s2 = "123";
Stock s3;//编译错误,因为没有默认的构造函数
s3 = s2;
---------------------------
【 在 shenlei 的大作中提到: 】
: 你写的第一个是先构造了一个临时Stock对象,然后把这个临时对象拷贝给了s2,使用的是默认拷贝构造函数...
: 第二个和第一个同理,但是这里用赋值构造函数,因为对象s2已经存在了...
: 我觉得是正确的,你用的什么编译器?
原来这么复杂...
【 在 wo (喔哈) 的大作中提到: 】
: 简单的说
: 带一个参数的构造函数会自动生成对应的operator=,
: 即由Stock(const char *co)自动生成Stock & operator=(const char *),所以你的第一条语句能正确执行。
: ...................
我用的是VS2010
【 在 shenlei 的大作中提到: 】
: 你写的第一个是先构造了一个临时Stock对象,然后把这个临时对象拷贝给了s2,使用的是默认拷贝构造函数...
: 第二个和第一个同理,但是这里用赋值构造函数,因为对象s2已经存在了...
: 我觉得是正确的,你用的什么编译器?
: ...................