类B拥有类A的全部特点,则可以把A作为一个基类,B就是A的一个派生类
派生类用用基类的全部成员函数和成员变量,不论是private、protected、public
- 派生类的各个成员函数中,不能访问基类中的private成员
class CStudent {private:string sName;int nAge;public:bool isThreeGood() {};void setName(const string & name){sName = name;}// ...};class CundergraduateStudent:public CStudent {private:int nDepartment;public:bool isThreeGood() { ... } // 覆盖bool CanBaoYan() {...}};
派生类对象的内存空间
派生类对象的体积,等于基类对象的体积,再加上派生类对象自己的成员变量的体积
- 派生类的各个成员函数中,不能访问基类中的private成员
在派生类对象中,包含着基类对象,而且对象的存储位置位于派生类对象新增的成员变量之前
实例:学籍管理
class CStudent {private:string name;string id;char gender; // "F" & "M"int age;public:void PrintInfo();void SetInfo(const string & name_, const string & id_, int age_, char gender_);string GetName() {return name;}};class CUndergraduateStudent:public CStudent {private:string department;public:void QualifiedForBaoyan() {cout << "qualified for baoyan" << endl;}void PrintInfo() { // 因参数表和返回值类型相同,所以不是重载,是覆盖CStudent::PrintInfo(); // 调用基类的方法 不使用CStudent::的话,就成了递归cout << "Department:" << department << endl;}void SetInfo(const string & name_, const string & id_, int age_, char gender_,const string & department_) {CStudent::SetInfo(name_, id_, age_, gender_); // 调用基类的方法department = department_;}};
