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