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