首先我們以一個學生類為例,介紹繼承的寫法:(程序17.3.1) //student.h #include <iostream> using namespace std; class student//學生類作為父類 { public: student(char *n,int a,int h,int w);//帶參數的構造函數 student();//不帶參數的構造函數 void set(char *n,int a,int h,int w);//設置 char * sname(); int sage(); int sheight(); int sweight(); protected: char name[10];//姓名 int age;//年齡 int height;//身高 int weight;//體重 private: int test; }; char * student::sname() { return name; } int student::sage() { return age; } int student::sheight() { return height; } int student::sweight() { return weight; } void student::set(char *n,int a,int h,int w) { int i; for (i=0;n[i]!='/0';i++) { name[i]=n[i]; } name[i]='/0'; age=a; height=h; weight=w; return; } student::student(char *n,int a,int h,int w) { cout <<"Constructing a student with parameter..." <<endl; set(n,a,h,w); } student::student() { cout <<"Constructing a student without parameter..." <<endl; } //undergraduate.h #include "student.h" class Undergraduate:public student//本科生類作為子類,繼承了學生類 { public: double score(); void setGPA(double g);//設置績點 bool isAdult();//判斷是否成年 protected: double GPA;//本科生績點 }; double Undergraduate::score() { return GPA; } void Undergraduate::setGPA(double g) { GPA=g; return; } bool Undergraduate::isAdult() { return age>=18?true:false;//子類訪問父類的保護成員數據 } //main.cpp #include <iostream> #include "undergraduate.h" using namespace std; int main() { Undergraduate s1;//新建一個本科生對象 s1.set("Tom",21,178,60); s1.setGPA(3.75); cout <<s1.sname() <<endl; cout <<s1.sage() <<endl; cout <<s1.sheight() <<endl; cout <<s1.sweight() <<endl; cout <<s1.score() <<endl; cout <<s1.isAdult() <<endl; return 0; }
運行結果: Constructing a student without parameter... Tom 21 178 60 3.75 1 在使用繼承之前,我們必須保證父類是已經定義好的。如果父類是虛無的、沒有被定義的,那么子類也就沒什么好繼承的了。定義一個子類的語法格式為: class 子類名:繼承方式父類名; 根據程序17.3.1的運行結果,我們可以清楚地看到,學生類里面的公有和保護成員都已經被繼承到本科生類。本科生類可以使用學生類的成員函數,也可以訪問學生類的保護成員。而本科生類中定義的成員則是對學生類的補充,并且也能夠被使用。