注册 登录
编程论坛 C++教室

请教问题........

x_wangyue 发布于 2010-09-19 16:20, 592 次点击
大侠们谈哈自己对:
1。复制构造函数
2。赋值操作符
的见解。
要的是你们自己领悟的东西,不要照着书搬来的,谢谢!!!
5 回复
#2
蛤蟆VS天鹅2010-09-21 10:20
兄弟,我对这些个也不懂,望大虾们讲讲,尤其是那个操作符,兄弟我在这先谢过大家了
#3
lintaoyn2010-09-22 08:16
先从简单的来看
int a = 3;//这是复制初始化
int b(3);//这叫直接初始化
int c;//如果是全局对象刚初化为0。不是的话则不进行初始化,其值不确定。
c = 4;//这是赋值
可以理解成,在定义一个对象时马上为其指定一个值的行为是初始化。而赋值是初始化之后用=号指定对象值的行为。

//用类来观察会更清晰
#include<iostream>
using namespace std;
class A
{
public:
    A() : a(0)
    {
        cout << "默认构造函数被调用" << endl;
    }
    A(int i) : a(i)
    {
        cout << "构造函数被调用" << endl;
    }
    A(const A& b) : a(b.a)
    {
        int d;
        cin >> d;
        a += d;
        cout << "复制构造函数被调用" << endl;
    }
    A& operator= (const A& b)
    {
        a = b.a;
        cout << "重载的赋值操作符被调用" << endl;
        return *this;
    }
private:
    int a;
};
int main(int argc, char *argv[])
{
    A a;//输出 "默认构造函数被调用"
    A g = a;//输出"复制构造函数被调用"
    a = g;//输出"重载的赋值操作符被调用"
    A c = 9;//"构造函数被调用"
    return 0;
}
对A c = 9;来说先用9产生一个A类型的临时对象(调用A(int i) : a(i){}),然后使用复制构造函数来用c初始化。
但是因为编译器的优化功能,它会直接对c调用A(int i) : a(i){}进行初始化。

[ 本帖最后由 lintaoyn 于 2010-9-22 08:17 编辑 ]
#4
crazy_pro2010-09-24 12:56
复制构造函数说白了就是对自定义的类型进行复制,至于怎么写要看你的你自己的复制要求。你需根据自己定义的类的类型定义你自己的复制构造函数当然系统也会自己生成一个!
赋值操作符说白了就是重载!
#5
zhj1232010-09-24 22:51
hao
#6
零下八度2010-09-26 16:07
感觉拷贝构造函数好麻烦  最近看何洁月的C++视频看的晕晕的。。。尤其那3方面应用的时候
1