computer 版 (精华区)
发信人: remember (Learning C++), 信区: program
标 题: 由拷贝构造函数引出的
发信站: 听涛站 (2001年10月29日18:31:40 星期一), 站内信件
拷贝构造函数,Copy Constructor,主要用于以下情况:
1.A a; 然后对a进行操作 A b(a);
2.某函数:f(A a) {...}; 则:A b; f(b); 引发调用拷贝构造函数
当然,也有些情况下上面的第二种情况不调用拷贝构造函数,不过这个
是在编译器的讨论范畴,我也一知半解,就不说什么了。
这篇文章的本来想说如何定义拷贝构造函数。
A (A &);
这样对么?也对也不对。这确实算一种拷贝构造函数,但这个拷贝构造
函数经常会给你带来问题:
const A a;
A b(a); //faint了,编译器不让通过
主要的问题就是在const不能默认转为non-const。所以更准确的做法是
A (const A &);
意外的,我发现可以同时写:
A(A &);
A(const A &);
尽管VC6会给出一个warning,但linux的g++连warning也没有。
我们都知道,以下定义是非法的:
class A {
public:
void show(int i) {...}
void show(const int i) {...}
};
但是,在拷贝构造函数中却允许我们就参数的const而重载拷贝构造函数,
这算是拷贝构造函数和其他函数的一点不同吧~~~
当然了,函数是否为const是可以重载的,就是说,以下写法非常合法:
class A {
public:
void show(int i) {...}
void show(int i) const {...}
};
不过,也别忘了返回类型不同是不能重载的。呵呵。
简单知识而已~~~~
--
洛阳亲友如相问 一片冰心在玉壶
※ 来源:·听涛站 tingtao.dhs.org·[FROM: 匿名天使的家]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:0.862毫秒