+ -
当前位置:首页 → 问答吧 → 复制构造函数可以写成这样?

复制构造函数可以写成这样?

时间:2011-12-15

来源:互联网

#ifndef COW_H_
#define COW_H_
class Cow
{
char name[20];
char *hobby; //hobby(业余爱好);
double weight; //重量;
public:
Cow();
Cow(const char *nm,const char *ho,double wt);
Cow(const Cow c&);
~Cow();
Cow &operator=(const Cow &c);
void ShowCow()const; //diaplay all cow data(显示cow所有的数据);
};
#endif
我在书上看了个习题给了这样的类声明
Cow(const Cow c&);这什么意思啊

作者: xuefeng7260   发布时间: 2011-12-15

Cow(const Cow c&);是复制构造函数。传递的参数是类Cow的对象的引用。至于为什么会用const,那是因为引用可以改变属性值。所以加const,禁止用户私自修改参数的值。还有就是传递引用可以减少调用其他的构造函数,提升效率。

作者: W170532934   发布时间: 2011-12-15

Cow(const Cow c&)和Cow(const Cow &c);效果一样吗?

作者: xuefeng7260   发布时间: 2011-12-15

你用的什么编译器,编译没有报错么?

作者: milkylove   发布时间: 2011-12-15

引用 2 楼 xuefeng7260 的回复:

Cow(const Cow c&)和Cow(const Cow &c);效果一样吗?


不一样,第一种写法是错误的。

作者: pathuang68   发布时间: 2011-12-15

引用 3 楼 milkylove 的回复:
你用的什么编译器,编译没有报错么?

用的VS2010 我看C++primer plus的426页给的类声明是Cow(const Cow c&)编译器貌似不通过

作者: xuefeng7260   发布时间: 2011-12-15

Cow(const Cow c&)
是错的 Cow&和Cow*一样是一种变量类型

作者: sryan   发布时间: 2011-12-15

引用 4 楼 pathuang68 的回复:
引用 2 楼 xuefeng7260 的回复:

Cow(const Cow c&)和Cow(const Cow &c);效果一样吗?


不一样,第一种写法是错误的。

++

作者: neolyao   发布时间: 2011-12-15

编译器都报错了,你还有什么好问的呢

作者: milkylove   发布时间: 2011-12-16

引用 1 楼 w170532934 的回复:
Cow(const Cow c&);是复制构造函数。传递的参数是类Cow的对象的引用。至于为什么会用const,那是因为引用可以改变属性值。所以加const,禁止用户私自修改参数的值。还有就是传递引用可以减少调用其他的构造函数,提升效率。

加const另外一个比较重要的原因是
const Cow &会绑定右值的临时对象 而Cow &不行

作者: Demon__Hunter   发布时间: 2011-12-16

C/C++ code
Cow(const Cow c&);//复制构造函数

作者: cxxer   发布时间: 2011-12-16