class Point { public: Point(int xx,int yy); //构造函数 Point(Point &p); //赋值构造函数,注意形参是本类对象的引用。 int getX() { return x; } int getY() { return y; } //写成了内联函数的形式 private: int x,y; }; Point::Point(int xx,int yy) { x = xx; y = yy; } Point::Point(Point &p) { x = p.x; y = p.y; cout << "调用了复制构造函数" << endl; } int main() { Point a(3, 4); Point b(a); //传递a的引用,调用一次复制构造函数 Point c = a; //再次调用,和b(a)方式一样; //测试: cout << "b的x: "<<b.getX() << endl; cout << "c的x: "<<c.getX() << endl; }
结果:
调用了复制构造函数 调用了复制构造函数 b的x: 3 c的x: 3
(2)函数的形参是类的对象的时候,调用函数进行形实结合的时候
void f(Point p) { cout << p.getX() << endl; }
f(a); //调用一次复制构造函数
结果:
调用了复制构造函数 3
注意这种情况: 只有在对象进行值传递的时候会进行调用复制构造函数,引用传递不会调用。
(3) 函数的返回值为类的对象的时候,函数执行结束返回调用者时
代码:
//函数的返回值是类的对象 Point g() { Point a(50, 100); return a; }
注意:
参考书籍:C++语言程序设计第四版(郑莉,董渊,何江舟)