曲径通幽论坛

标题: 复制构造函数的参数 [打印本页]

作者: beyes    时间: 2011-8-21 11:17
标题: 复制构造函数的参数
复制构造函数需要为对象的引用,而不能是对象的一个副本。比如可以 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;      //错误,不能直接访问私有成员变量,区别于对象引用作为函数参数(复制构造函数)的情况





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2