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毫秒