C++提高:拷贝构造函数
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++提高:拷贝构造函数相关的知识,希望对你有一定的参考价值。
文章目录
拷贝构造函数里能调用 private 成员变量吗?
解答:拷贝构造函数其时就是一个特殊的构造函数,操作的还是自己类的成员变量,所以不受 private 的限制。
一个类中可以存在多于一个的拷贝构造函数吗?
解答:类中可以存在超过一个拷贝构造函数。
例子:
class X {
public:
X(const X&); // const 的拷贝构造
X(X&); // 非 const 的拷贝构造
};
调用拷贝构造函数的情形
1. 一个对象作为函数参数,以值传递的方式传入函数体
例如下面案例
#include<iostream>
using namespace std;
class A {
public:
A() {};//构造函数
A(A&a)//复制构造函数
{
cout << "Copy constructer called" << endl;
}
};
void Func(A a)//普通函数
{
}
int main()
{
A b;
Func(b);//此语句相当于是将b复制给Func(a)中的a,导致调用复制构造函数
return 0;
}
2. 一个对象作为函数返回值,以值传递的方式从函数返回
例如下面案例,Func函数得到的是返回值a
#include<iostream>
using namespace std;
class A {
public:
int v=0;
A(int i) {
v = i;
};//构造函数
A(A&a)//复制构造函数
{
cout << "Copy constructer called" << endl;
}
};
A a(4);
A Func()//普通函数
{
return a;
}
int main()
{
cout << Func().v << endl;//此语句中的Func()是一个类A的对象,但是不是a,只是用a初始化。
return 0;
}
3. 一个对象用于给另外一个对象进行初始化(常称为赋值初始化)
例如这样就会调用
Complex c1(c2);
Complex c1=c2;
这样就不会调用(这是浅复制)
Complex c1,c2;
c1=c2;
以上是关于C++提高:拷贝构造函数的主要内容,如果未能解决你的问题,请参考以下文章