1.调用父类的拷贝赋值运算符
#include <iostream>
using namespace std;
class Person
{
int m_age;
public:
Person(int age) : m_age(age)
{
cout << "调用了Person的构造函数" << endl;
}
Person& operator=(const Person& person)
{
m_age = person.m_age;
cout << "调用了Person的拷贝赋值运算符" << endl;
return *this;
}
};
class Student : public Person
{
int m_score;
public:
Student(int age, int score) : m_score(score), Person(age)
{
cout << "调用了Student的构造函数" << endl;
}
Student& operator=(const Student& student)
{
Person::operator=(student);
m_score = student.m_score;
cout << "调用了Student的拷贝赋值运算符" << endl;
return *this;
}
};
int main()
{
Student stu1(18, 90);
Student stu2(20, 100);
stu2 = stu1;
return 0;
}
输出结果如下:
2.用子类对象给父类对象赋值
用派生类对象给基类对象赋值时,只有该派生类对象的基类部分会被用于赋值,派生类部分将会被忽略掉。
#include <iostream>
using namespace std;
class Person
{
int m_age;
public:
Person(int age) : m_age(age)
{
cout << "调用了Person的构造函数" << endl;
}
Person& operator=(const Person& person)
{
m_age = person.m_age;
cout << "调用了Person的拷贝赋值运算符" << endl;
return *this;
}
};
class Student : public Person
{
int m_score;
public:
Student(int age, int score) : m_score(score), Person(age)
{
cout << "调用了Student的构造函数" << endl;
}
Student& operator=(const Student& student)
{
Person::operator=(student);
m_score = student.m_score;
cout << "调用了Student的拷贝赋值运算符" << endl;
return *this;
}
};
int main()
{
Person person(18);
Student stu(20, 100);
person = stu; // 此处会调用Person的拷贝赋值运算符。但是Person作为基类,它只能处理基类自己的成员,无法处理派生类中的成员。
return 0;
}