标签:怎么 col The int 有一个 假设 private out 结果
我们先看一个普通的构造函数的使用
class Test { private: /* data */ public: Test(int a); ~Test(); int A; }; Test::Test(int a) { A = a; } Test::~Test() { } int main() { Test test(1); cout<<test.A<<endl; }
我们定义了一个类 Test 并用了类名定义了一个构造函数,用来传入成员变量A的值。
这是一个正常的构造函数的用法。
那么拷贝构造函数什么时候用呢?
当我想用一个对象去初始化另一个对象的时候。
Test A;
Test A(B);
就需要用到拷贝构造函数,我们看一下怎么写
class Test { private: /* data */ public: Test(int a); Test(const Test &q); ~Test(); int A; }; Test::Test(int a) { A = a; } Test::Test(const Test &q) { A = q.A + 1; } Test::~Test() { } int main() { Test test(1); Test test2(test); Test test3 = test; cout<<test.A<<endl; cout<<test2.A<<endl; cout<<test3.A<<endl; }
输出结果
1 2 2
代码中标红的部分,就是拷贝构造函数,和他的调用方法。为了区分 用拷贝构造函数赋值的对象,所以我给 A 加了 1 .
假设现在我有一个普通函数调用了刚创建的类,我们看一下运行结果
class Test { private: /* data */ public: Test(int a); Test(class Test &q); ~Test(); int A; }; Test::Test(int a) { A = a; } Test::Test(class Test &q) { A = q.A + 1; } Test::~Test() { } void get(Test p) { cout<<"the A int get() is : "<<p.A<<endl; } int main() { Test test(1); Test test2(test); Test test3 = test; cout<<test.A<<endl; cout<<test2.A<<endl; cout<<test3.A<<endl; get(test2); }
运行结果:
1 2 2 the A int get() is : 3
证明我们在调用 get函数,传参的时候 Test p 又重新调用了一次拷贝构造函数,所以输出的值是3
标签:怎么 col The int 有一个 假设 private out 结果
原文地址:https://www.cnblogs.com/qifeng1024/p/12636716.html