拷贝构造函数和赋值运算符的调用时机

摘自:http://www.2cto.com/kf/201211/166530.html

#include <iostream>
using namespace std;
class Fraction{ 
private: 
    int fenmu; //分母 
    int fenzi; //分子 
public: 
    Fraction(int x,int y){ 
        fenzi = x; 
        fenmu = y; 
    } 
    Fraction(){} 
 
    Fraction(const Fraction & fr); 
    Fraction & operator=(Fraction& p); 
 
    void display(){ 
        cout << fenmu << " " << fenzi; 
    } 
}; 
 
Fraction::Fraction(const Fraction & fr){ 
    cout << "test: use copy" << endl; 
    fenmu = fr.fenmu; 
    fenzi = fr.fenzi; 
} 
 
Fraction & Fraction::operator=(Fraction& fr){ 
    if(this == &fr) 
        return *this; 
    fenmu = fr.fenmu; 
    fenzi = fr.fenzi; 
    cout << "test use =" << endl; 
    return *this; 
} 
 
 
int main(){ 
    Fraction f(1,2); 
    Fraction f2(f); //use copy 
    //f2.display(); 
    Fraction f3 = f2; // use copy 
    Fraction f4; 
    f4 = f3; // use = 
    //f5.display(); 
    return 0; 
}

从上面的代码可以看出:

调用拷贝构造函数的时候是

 Fraction f2(f); //use copy  ,其实等价于  Fraction f3 = f2; // use copy 

就像我们其实可以这样子赋值 int a(1)  等价于 int a=1; 可能我们还不够习惯

调用赋值操作运算符

    Fraction f4; 
    f4 = f3; // use = 
因为已经实例化f4,所以不可能调用任何的构造函数,所以这个时候只能够调用赋值操作运算符


 

你可能感兴趣的:(拷贝构造函数,赋值运算符)