类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_;
}
};