C++拷贝构造函数 的理解

#include <iostream>
using namespace std;
//拷贝构造函数的理解
class Point
{
public:
    Point();
    Point(int X, int Y);
    ~Point();
    Point(Point &p);
    void setPoint(int X, int Y)
    {
        x = X;
        y = Y;
    }
public:
    int x, y;
};
Point::Point()
{
    x = 0;
    y = 0;
    cout << "缺省样式的构造函数\n";
}
Point::Point(int X, int Y)
{
    x = X;
    y = Y;
    cout << "正常构造\n";
}
Point::~Point()
{
    cout << "点(" << x << "" << y << ")析构函数调用完毕\n";
}
Point::Point(Point &p)
{
    x = p.x;
    y = p.y;
    cout << "拷贝构造函数\n";
}
void f(Point p)
{
    cout << "函数f之中:" << endl;
    p.setPoint(p.x, p.y);
}
void f2(Point &p)
{
    cout << "函数f之中:" << endl;
    p.setPoint(p.x, p.y);
}
Point g()
{
    Point a(7, 33);
    cout << "函数g之中:" << endl;
    return a;
}

int main(void)
{
    Point p1(10, 10);
    Point p2;
    
    f(p2);
    f2(p1);
    return 0;
}
/*总结:
    1.对于f()函数的调用,首先要“调用拷贝构造函数”以实现从实参到形参的传递
相当于语句 “形参 = 实参”(p = p2),当函数类型为引用时,就不会调用拷贝构造函数。
引用相当于别名 不申请内存空间.
    2.对于构造函数和析构函数的调用时一一对应的,即“先构造的后析构”类似于栈的“先进后出”原则。
*/
 

猜你喜欢

转载自www.cnblogs.com/zby-yao/p/10016615.html