|
发表于 2022-7-26 12:44:34
|
显示全部楼层
本帖最后由 yoobaby 于 2022-7-26 13:25 编辑
正好学习笔记里面有:
C++中三种情况下会调用拷贝构造函数:
* 使用一个已经创建完毕的对象来初始化另一个新对象。
* 值传递的方式给函数参数传值。
* 以值方式返回局部对象。
- class Point
- {
- private:
- int xPos;
- int yPos;
- public:
- Point(int x = 0, int y = 0) {
- cout << "调用构造函数" << endl;
- xPos = x;
- yPos = y;
- }
- //拷贝构造函数定义及实现
- Point(const Point& pt) {
- cout << "调用拷贝构造函数" << endl;
- xPos = pt.xPos;
- yPos = pt.yPos;
- }
- Point& operator=(const Point& pt) {
- cout << "调用重载运算符=函数" << endl;
- xPos = pt.xPos;
- yPos = pt.yPos;
- return *this;
- }
- void print() {
- cout << "xPos: " << xPos << ",yPos: " << yPos << endl;
- }
- };
- void showPoint(Point p) {
- p.print();
- }
- Point createPoint() {
- Point p(5, 6);
- return p;
- }
- int main() {
- Point pt1(3, 4);
- pt1.print();
- //使用一个已创建的对象来初始化另一个新对象时将调用拷贝构造函数
- Point pt2 = pt1; //等价于Point pt2(pt1),调用拷贝构造函数
- pt2.print();
- //值传递的方式给函数参数传值时将调用拷贝构造函数
- showPoint(pt2);
- //以值方式返回局部对象时将调用拷贝构造函数,有移动构造时则调用移动构造!
- Point pt3 = createPoint();
- Point pt4;
- pt4 = pt3; //调用默认的赋值运算符重载函数
- pt4.print();
- return 0;
- }
复制代码 |
|