zby-yao

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

相关文章: