wow7jiao 发表于 2018-9-17 11:03:19

C++ 复制构造函数

本帖最后由 wow7jiao 于 2018-9-17 11:08 编辑

#include <iostream>
using namespace std;

class Point
{
        public:
                Point (int xx = 0, int yy = 0)
                        {
                                x = xx;
                                y = yy;
                        }
                       
                        Point (Point &p);
                        int getX() {return x;}
                        int getY() {return y;}
        private:
                int x, y;
       
};

Point::Point (Point &p)--------------------------------------------这个1
{
        x = p.x;
        y = p.y;
        cout << "Calling the copy constructor" << endl;
}

int main()
{
        Point a (1, 2);-------------------------------------------------〉请老师指点,这里建立对象a,前面1没有设置初始化的构造函数。为什么也可以将实参值初始化。
        //Point b (a);
       
        cout << a.getX() << endl;
        return 0;
}

qq1242009750 发表于 2018-9-17 11:03:20

1.拷贝构造函数的参数是Point::Point (const Point &p) 类型的
2.你这里相当于有两个构造函数   Point (int xx = 0, int yy = 0) 和 Point (Point &p),根据函数重载规则
Point a (1, 2) 和 Point b (a) 都可以创建一个对象
{:5_102:}

moc 发表于 2018-9-17 12:30:03

Point a (1, 2);   这个是通过括号里的1,2两个参数来初始化a,很明显要调用有参构造函数来初始化;
point b(a);      用一个对象a去初始化另一个新定义的对象b,这个肯定要调拷贝构造函数呗,
还有这种情况 Point b = a;    C++编译去也会调用拷贝构造函数通过a去初始化b;
这是拷贝构造函数的简单应用场景,还有对象在从实参传给形参的时候,和调用返回类对象的函数的时候也会调用拷构造函数。
页: [1]
查看完整版本: C++ 复制构造函数