调用父类拷贝构造
#include <iostream>
using namespace std;
class Person {
public:
int m_age;
Person(int age) :m_age(age) {}
Person(const Person& person) :m_age(person.m_age) {}
};
class Student:public Person {
public:
int m_score;
Student(int age,int score):Person(age),m_score(score) {}
Student(const Student& student) :Person(student), m_score(student.m_score) {}
};
int main() {
Student *stu1 = new Student(10,30);
Student stu2(*stu1);
cout << "stu2.m_age = " << stu2.m_age << endl;
cout << "stu2.m_score = " << stu2.m_score << endl;
return 0;
}
- 直接将student对象传给Person
- 不写,默认也会将父类的拷贝
深拷贝1
#include <iostream>
using namespace std;
class Person {
public:
int m_age;
char* m_name;
Person( int age = 100,const char *name = NULL) :m_age(age) {
if (name == NULL) return;
m_name = new char[strlen(name)+1]();
strcpy(m_name, name);
}
~Person() {
if (m_name = NULL) return;
delete[] m_name;
m_name = NULL;
}
void display() {
cout << "m_age: " << m_age << endl;
cout << "name: " << m_name << endl;
}
};
int main() {
char name[] = "youyou";
Person* per = new Person(10, name);
per->display();
return 0;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dd3d106857e766b83a8facbae0c66736.png)
深拷贝2
#include <iostream>
using namespace std;
class Person {
int m_age;
char* m_name;
void copy(const char* name = NULL) {
if (name == NULL) return;
m_name = new char[strlen(name) + 1]();
strcpy(m_name, name);
}
public:
Person( int age = 100, const char* name = NULL) :m_age(age) {
copy(name);
}
Person(const Person& person) {
copy(person.m_name);
}
~Person() {
if (m_name = NULL) return;
delete[] m_name;
m_name = NULL;
}
void display() {
cout << "m_age: " << m_age << endl;
cout << "name: " << m_name << endl;
}
};
int main() {
Person per1(10, "you");
Person per2(per1);
per2.display();
return 0;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/70026196e694d487068de9446aabcbaa.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8f5bf9aedb126263dc1fd0dc54223916.png)
- 浅拷贝(shallow copy):指针地址的拷贝
- 深拷贝(deep copy):指针指向内容的拷贝