CopyConstructor.cpp,RUN
//拷贝构造函数的用法
#include <iostream>
class Vector
{
private:
int x, y;
public:
Vector()//不带参数的普通构造函数
{
x = 0;
y = 0;
std::cout << "Constructor\n";
}
Vector(int x, int y)//不带参数的普通构造函数
{
this->x = x;
this->y = y;
std::cout << "Constructor 2\n";
}
Vector(const Vector & v)//拷贝构造函数
{
x = v.x;
y = v.y;
std::cout << "Copy Constructor\n";
}
Vector & operator= (const Vector & v)//赋值函数
{
std::cout << "operator=\n";
x = v.x;
y = v.y;
return *this;
}
int X()const { return x; } //const函数,说明该函数不会修改数据成员的值
int Y()const { return y; } //const函数,说明该函数不会修改数据成员的值
};
void FunByValue(Vector v)
{//v的值,通过拷贝构造函数得到
std::cout << v.X() << std::endl;
}
void FunByRef(const Vector & v)
{//v,就是实参,引用,其实就是别名
std::cout << v.X() << std::endl;
}
Vector CreateVector(int x, int y)
{//返回值以拷贝构造函数的形式返回
//但是,Microsoft C++(返回值出现拷贝构造函数调用)和GCC(没有)表现不一致
Vector v(x, y);
return v;
}
int main()
{
Vector v1, v2(1,2);//构造函数
Vector v3(v2);//拷贝构造函数
Vector v4 = v2;//拷贝构造函数,不是赋值,v4创建并且初值
v4 = v2;// 现在是赋值运算符了,因为v4已经存在
//函数(按值)参数传递,出现拷贝构造函数调用
FunByValue(v4);
//引用方式调用,什么都不发生
FunByRef(v4);
std::cout << "CreateVector\n";
//函数值返回,Microsoft C++(返回值出现拷贝构造函数调用)和GCC(没有)表现不一致
Vector v5 = CreateVector(3, 4);
return 0;
}