(二)c++類的繼承與派生
阿新 • • 發佈:2019-01-14
繼承與派生
類的派生定義
class derived_class:access_control base_class
{
//派生類的屬性和方法
//虛擬函式重寫
};
derived_class 就是我們派生的新的類。
base_class 就是被繼承的類,我們成為基類或者父類。
access_control 就是訪問控制,分為public、private、protected。
繼承的重要說明
- 子類擁有父類的所用成員變數和成員函式(除了建構函式和解構函式);
- 子類可以新增新的屬性和方法;
- 子類是一種特殊的父類;
- 子類物件可以當做父類物件使用(型別相容性原則、這也是產生多型的原因)。
*型別相容性原則
(後面補充…)
繼承方式對繼承成員訪問屬性的影響
表1 | 父類成員訪問級別 | public | protected | private |
---|---|---|---|---|
繼承方式 | 派生類成員屬性 | |||
public | public | protected | private | |
protected | protected | protected | private | |
private | private | private | private |
1. c++中繼承方式對子類成員訪問成員的影響
- public 繼承:父類成員在子類中保持原有的訪問級別
- private繼承:父類成員在子類中變成private成員
- protected繼承:父類public成員變成protected,父類protected成員仍然是protected屬性,父類private成員仍然是private屬性。
2.父類中的private成員在子類中依然存在,但是無法訪問
繼承中的構造與析構
型別相容性原則(子類就是特殊的父類)
- 子類物件可以直接當做父類使用
- 子類物件可以直接賦值給父類物件
- 子類物件可以直接初始化父類物件
- 父類指標可以直接指向子類物件
- 父類引用可以直接引用子類物件
注意:在進行上述5個操作之後,派生類(子類)只能使用從父類繼承過來的成員。
請看下面的例子:
#include<iostream>
using namespace std;
class Parent//父類
{
public:
Parent()
{
name = "parent";
}
void print()
{
cout << "name:" << name << endl;
}
protected:
const char* name;
private:
};
class Child:public Parent//子類
{
protected:
int i;
public:
Child(int i)
{
this->name = "child";
this->i = i;
}
};
int main()
{
Child child(100);
//型別(賦值)相容型原則
Parent p1(child);
Parent *pp1 = &child;
Parent &p = child;
p1.print();
pp1->print();
p.print();
return 0;
}
輸出:
*型別相容性原則是C++實現多型的基礎。