赋值兼容规则: 是指在需要基类对象的任何地方, 都可以使用公有派生类对象来替代。
通过公有继承, 派生类得到了基类中除构造函数、析构函数外的所有成员。 这样,公有派生类实际就具备了基类的所有功能, 凡是基类能解决的问题, 公有派生类都可以解决。
赋值兼容原则中的替代主要包括以下情况:
- 派生类的对象可以赋值给基类对象。
- 派生类的对象可以初始化基类的引用。
- 派生类对象的地址可以赋值给指向基类的指针。
#include<iostream>
#include<string>
using namespace std;
class Student
{
protected:
int age_;
string name_;
public:
void setStud(int age, string name)
{
age_ = age;
name_ = name;
}
void print()
{
cout << "姓名:" << name_ << " 年龄:" << age_ << endl;
}
int get_age()
{
return age_;
}
};
class CollegeStudent : public Student
{
private:
string major_;
public:
void setCStud(int age, string name, string major)
{
age_ = age;
name_ = name;
major_ = major;
}
void print()
{
cout << "姓名:" << name_ << " 年龄:" << age_ << " 专业:" << major_ << endl;
}
};
void work(Student &s)
{
if (s.get_age() >= 18)
{
cout << "达到法定工作年龄" << endl;
}
else
{
cout << "未达到法定工作年龄" << endl;
}
}
int main()
{
Student stu;
stu.setStud(24, "张晓琨");
stu.print();
CollegeStudent cStu;
cStu.setCStud(24, "韩德川", "计算机");
cStu.print();
Student stu1 = cStu; //将派生类的对象赋值给基类的对象
stu1.print();
Student &rs = cStu; //使用派生类的对象初始化基类的引用
rs.print();
Student *ps = &cStu; //可以将派生类对象的地址赋值给指向基类的指针
ps->print();
work(stu); //使用基类对象作为实参
work(cStu); //使用派生类对象作为实参
return 0;
}