継承:Aは基本クラスとして、BはAの派生クラスとして、BはAを継承し、AはBを派生すると呼ばれます
- 派生クラスには、基本クラスのすべてのメンバー関数とメンバー変数があります
- 派生クラスは、基本クラスを変更および拡張することによって取得できます
- 派生クラスが定義されると、基本クラスに依存せずに独立して使用できます
- 派生クラス兄弟のメンバー関数は、基本クラスのプライベートにアクセスできません
派生クラスの記述:
class B:public A{...}
派生オブジェクトのメモリ空間
派生オブジェクトボリューム=ベースオブジェクトボリューム+派生オブジェクト自身のメンバー変数ボリューム
(派生オブジェクトにはベースオブジェクトが含まれます)
#include<iostream>
#include<string>
using namespace std;
class Student{
private:
string name;
string ID;
int age;
char gender;
public:
void printfinfo();
void setinfo(const string& s1,const string& s2,int n, char ch);
string getname(){
return name;}
};
class CStudent:public Student
{
private:
string department;
public:
void printfinfo();
void setinfo(const string& s1,const string& s2,int n, char ch,const string& s3);
void qualified(){
cout<<"qualified for baoyan\n";
}
};
void Student::printfinfo()
{
cout<<name<<"("<<ID<<", "<<gender<<")"<<" is "<<age<<" years old ";
}
void Student::setinfo(const string& s1,const string& s2,int n,char ch)
{
name = s1;
ID =s2;
age = n;
gender = ch;
}
void CStudent::printfinfo()
{
Student::printfinfo();
cout<<", he is in "<<department<<" department";
}
void CStudent::setinfo(const string& s1,const string& s2,int n,char ch,const string& s3)
{
Student::setinfo(s1,s2,n,ch);
department = s3;
}
int main()
{
CStudent s1;
s1.setinfo("Jeff","2018224042",20,'M',"BME");
s1.printfinfo();cout<<endl;
cout<<s1.getname()<<" is ";
s1.qualified();
}
- 派生クラスも同じ名前の関数を記述し、同じ名前の関数で同じ名前の基本クラスの関数を呼び出します。これはカバレッジと呼ばれます。