class ChemistryStudent : A Student 表示ChemistryStudent各成員至少都有A等級的修飾
接下來的討論以public inheritance為主
ChemistryStudent class 繼承 Student class
建構子是無法直接被繼承的
此時一定需要有建構子,且要設定成public
class ChemistryStudent : public Student{
public:
ChemistryStudent(){
}
};
為了程式碼的再利用,constructor繼承父類別
#include <iostream>
#include <string>
using namespace std;
class Student{
private:
string Name;
int Age;
float GPA;
public:
//constructor
Student(string name, int age){
Name = name;
Age = age;
}
};
class ChemistryStudent : public Student{
public:
ChemistryStudent(string name, int age):Student(name, age){
}
};
int main()
{
Student Amy("Amy Lin",30);
ChemistryStudent Jim("Jim Liu", 20);
return 0;
}
成員取用的例子
class ChemistryStudent : public Student{
public:
ChemistryStudent(string name, int age):Student(name, age){
}
void RunColumn(){
cout << Name << " is running column.\n"; error
}
};
class Student{
protected:
string Name;
};
class ChemistryStudent : public Student{
public:
ChemistryStudent(string name, int age):Student(name, age){
}
void RunColumn(){
cout << Name << " is running column.\n";
}
};
繼承(Inheritance)
同一所學校的學生,有許多主修的科目,例如化學系的學生ChemistryStudent和電腦科學的學生CSStudent 此時就可以使用ChemistryStudent去繼承Student,不用再重新創建一個新的類別
衍生類別/子類別(derived class/subclass) ChemistryStudent
基礎類別/父類別(base class/superclass) Student
subclass Inherit superclass subclass會自動取得superclass除私有特質外的全部特質,做到程式碼再用(reuse)
C++支援的繼承關係為:
公有繼承(public inheritance) 最常用繼承關係,含義是「is-a」關係,代表了在完全使用公有繼承的物件類別之間的層次關係
受保護繼承(protected inheritance) 基礎類別的公有或保護內容可以被衍生類別使用。但是基礎類別對外界使用者是不可見的
私有繼承(private inheritance) 基礎類別的公有或保護內容僅可以被衍生類別存取。但基礎類別對衍生類別的子類別或衍生類別的使用者都是不可見的
各種修飾繼承class後Member修飾狀況
class ChemistryStudent : A Student
表示ChemistryStudent各成員至少都有A等級的修飾接下來的討論以public inheritance為主
ChemistryStudent class 繼承 Student class
建構子是無法直接被繼承的 此時一定需要有建構子,且要設定成public
為了程式碼的再利用,constructor繼承父類別
成員取用的例子
此時RunColumn()是無法取用Name這個成員的 因為Name是屬於父類別的private,是沒有繼承到此屬性的
解決此方法是將 string Name; 移至 protected 屬性,ChemistryStudent就可以使用繼承的Name