1.继承和派生的概念
继承:定义新的类B时,如果B与已有类A相似(B有A全部特点),那么可以把
A作为基类,B作为基类的派生类(子类);派生类可以对基类进行修改或扩充,派生类中,可扩充新的成员变量和成员函数;派生类定义后,可以独立使用,不依赖于基类。
注意:派生类拥有基类全部的成员函数和成员变量,包括private、protected、public; 在派生类的各个
成员函数中,不能访问基类中private成员
2.派生类格式
class
派生类名: public 基类名
{
……
};
3.派生类对象的内存空间
派生类对象包含着基类对象,而且基类对象的存储位置位于派生类对象新增的成员变量之前
4.实例程序:学籍管理
#include <iostream>
#include <string>
using namespace std;
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;
}
};
void CStudent::PrintInfo()
{
cout << "name:" << name << endl;
cout << "id:" << id << endl;
cout << "age:" << age<< endl;
cout << "gender:" << gender << endl;
}
void CStudent::SetInfo(const string &name_, const string &id_, int age_, char gender_)//设置信息
{
name = name_;
id = id_;
age = age_;
gender = gender_;
}
class CUndergraduateStudent :public CStudent//本科生类继承了CStudent类
{
private:
string department;//学生所在系
public:
void QualifiedForBaoyan() {
cout << "Qualified For Baoyan" << endl;
}
void PrintInfo()//在基类基础扩充
{
CStudent::PrintInfo();//调用了基类成员函数
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_;
}
};
int main()
{
CUndergraduateStudent s2;
s2.SetInfo("Frank","1131205",24,'M',"Computer Science");
cout << s2.GetName() <<" ";
s2.QualifiedForBaoyan();
s2.PrintInfo();
return 0;
}
输出:
Frank Qualified For Baoyan
name:Frank;
id:1131205
age:24
gender:M
Department:Computer Science