C++ 类中拷贝函数的作用场景
Person类的定义
#include<iostream>
using namespace std;
class Person {
private:
int mAge;
public:
Person() {
cout << "无参构造函数" << endl;
mAge = 0;
}
Person(int age) {
cout << "有参构造函数" << endl;
mAge = age;
}
Person(const Person& P) {
cout << "拷贝构造函数" << endl;
mAge = P.mAge;
}
};
使用一个已经创建完毕的对象来初始化一个对象
void test01() {
Person P1(20); //有参构造函数
Person P2(P1);
}
int main() {
test01();
}
值传递
void dowork(Person P) {
//来确定下是否拷贝,拷贝后的对象和拷贝前的对象是否相同
cout << (int*)&P << endl;
}
void test02() {
Person P;
cout << (int*)&P << endl;
dowork(P);
}
int main(){
test02()
}
值方式返回对象
Person doWork2() {
Person p1;
cout << (int*)&p1 << endl;
return p1;
}
void test03() {
Person p = doWork2();
cout << (int*)&p << endl;
}
int main(){
test03()
}
通过返回对象的地址来看看是否确确实实地新建了对象
下面针对test02
来看看输出结果
使用codeblock
使用VS
在这里插入图片描述
发现地址都是不一样的,那确实新建了新的对象
构造函数调用规则
默认情况下,c++编译器至少给一个类添加三个函数
- 默认构造函数 (空实现)
- 默认析构函数 (空实现)
- 默认拷贝函数 (值传递)
现在把之前设定的拷贝函数给删掉
Person类的定义
class Person {
private:
int mAge;
public:
Person() {
cout << "无参构造函数" << endl;
mAge = 0;
}
Person(int age) {
cout << "有参构造函数" << endl;
mAge = age;
}
~Person() {
cout << "析构函数" << endl;
}
int getAge() {
return mAge;
}
};
main.cpp
void test04() {
Person P1(20);
Person P2(P1);
cout << P2.getAge() << endl;
}
int main() {
//test01();
test04();
//test03();
}