曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3696|回复: 0
打印 上一主题 下一主题

复制构造函数的参数

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-8-21 11:17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
复制构造函数需要为对象的引用,而不能是对象的一个副本。比如可以 sample(const sample &ob); 但不能 sample(const sample ob); 其原因是,复制构造函数会在对象作为函数参数时被调用,这样一来像 sample(const sample ob); 这样的调用会无穷次递归调用。实际上,在程序中写成 sample(const sample ob); 如此形式,编译器也会报错。

一般情况下,复制构造函数的参数会写成 onst sample &ob 这样的形式,前面有 const 限定,所以不能在函数中修改引用对象的值,同时也不能使用对象的成员函数,即使这个成员函数并不会修改引用对象中成员变量的值,因为编译器会早早防止这种可能发生的情况。如:
[C++] 纯文本查看 复制代码
sample(const sample &ob)
{
        a = ob.a;
        b = ob.b;    
        ob.show();
}

编译器此时会报错:
“sample::show”: 不能将“this”指针从“const sample”转换为“sample &”

如果不使用 const 限定符,那么引用对象可以自由的改变成员变量以及使用成员函数。注意此时的对象引用访问私有成员变量的形式,可以直接 ob.a 这种访问。但是当对象的引用并不是作为函数参数传递进来的话,那么这样访问是会被编译器报错的,如再 main() 中声明:
[C++] 纯文本查看 复制代码
sample &a = b;
a.show();            //通过成员函数可以访问私有成员变量
cout << a.a << " " << a.b << endl;      //错误,不能直接访问私有成员变量,区别于对象引用作为函数参数(复制构造函数)的情况
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 15:31 , Processed in 0.084435 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表