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

2018-11-26 07:53:34来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

#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.对于构造函数和析构函数的调用时一一对应的,即“先构造的后析构”类似于栈的“先进后出”原则。
*/

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:【数据结构与算法】二叉树——哈夫曼编码

下一篇:Redis那些事(一) — Redis简介