继承:在定义一个新的类B时,如果该类与某个已有的类A相似(B拥有A的全部特点),吧么就可以把A作为一个基类,而把B作为基类的一个派生类(也称为子类)。
派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。
派生类一经定义后,可以独立使用,不依赖于基类。
派生类拥有基类的远不成员函数和成员变量,不论是public,protected,private。
在派生类的各个成员函数中,不能访问基类中的private成员。
写法:
class 派生类名:public 基类名{ };
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 is ThreeGood(){};//覆盖 bool CanBaoYan(){}; }; class CGraduatedStudent:public CStudnet{ private: int nDepartment; char szMentorName[20]; public: int CountSalary(){}; };
派生类对象的体积等于基类对象的体积加上派生类对象自己的成员变量的体积。在派生类对象中,包含着基类对象,而且基类对象的存储位置位于派生类对象新增的成员变量之前。
#include <iostream> #include <string> using namespace std; class CStudnet{ private: string name; string id; char gender; int age; public: void PrintInfo(); void SetInfo(const string & name_,const string &id_,int age_,char gender_); string GetName(){return name;} }; class CUndergraduateStudent:public CStudnet{ private: string department; public: void QUalifiedForBaoYan(){ cout<<"qualified for baoyan"<<endl; } void PrintInfo(){ CStudnet::PrintInfo(); cout<<"Department:"<<department<<endl; } void SetInfo(const string &name_,const string &id_,int age_,char gender_,const string&department_){ CStudnet::SetInfo(name_,id_,age_,geender); department=department_; } }; void CStudent::PrintfInfo(){ cout<<"Name:"<<name<<endl; cout<<"ID:"<<id<<endl; cout<<"Age:"<<age<<endl; cout<<"Gender:"<<gender<<endl; } void CStudnet::SetInfo(const string&name_,const string & id,int age_,char gender_){ name=name_; id=id_; age=age_; gender=gender_; } int main(){ CUndergraduateStudnet s2; s2.SetInfo("Harry Potter","118829212",19,'M',"Computer Science"); cout<<s2.GetName()<<" "; s2.QualifiedForBaoYan(); s2.printInfo(); return 0; }
习题:
如果多种事物,有一些共同的特点,又有各自不同的特点,如何编写类来代表这些事物比较合适?(C)
A)为每种事物独立编写一个类,各类之间互相无关
B)写一个类代表其中一种事物,代表其他事物的类,都从这个类派生出来
C)概括所有事物的共同特点,写一个基类。然后为每种事物写一个类,都从基类派生而来
D)一共就写一个类,包含所有事物的所有特点,然后用一个成员变量作为标记来区分不同种类的事物
继承:“是”关系:
符合:“有”关系
举一个栗子