c++常用知識點4
阿新 • • 發佈:2019-02-13
組合與繼承:
組合:has-a關係
繼承:is-a關係
C++類的繼承,指用現有類來建立新的類,即新類會獲得已有類的屬性和行為,並且可以新增新的屬性和行為
新的類稱為子類或派生類,已有類稱為父類或基類!
格式:
class 派生類名: 繼承方式 基類名
{
//派生類新增加的成員
};
繼承的過程:
1.接收基類的成員
2.修改成員的訪問許可權或隱藏基類中不需要的東西
3.新增新的屬性和行為
繼承方式:
public:公有繼承
priavte:私有繼承
protected:保護繼承
繼承方式決定了 基類中的成員 在派生類內部和在派生類的外部 的訪問許可權。
公有繼承:(掌握)
基類的公有成員、保護成員會成為派生類的公有成員和保護成員,基類的私有成員成為派生類的不可訪問成員
私有繼承:(瞭解)
基類的公有成員、保護成員會成為派生類的私有成員,基類的私有成員成為派生類的不可訪問成員
保護繼承:(瞭解)
基類的公有成員、保護成員會成為派生類的保護成員,基類的私有成員成為派生類的不可訪問成員
-------------------------------------------------------------------------------------------------
繼承中的建構函式與解構函式: 建構函式與解構函式不能被繼承 特性: 1.如果基類和派生類有預設的建構函式,編譯器會自動呼叫 2.如果需要把引數傳遞給基類的建構函式,必須定義帶引數的建構函式,且需要以派生類的初始化表的形式呼叫基類的建構函式 3.在呼叫派生類的建構函式之前,會先呼叫基類的建構函式。 4.在派生類物件被銷燬時,會先呼叫派生類自己的解構函式,再呼叫基類的解構函式 -------------------------------------------------------------------------------------------------
#include<iostream> using namespace std; class Student { public: void study() { cout << "學習使我快樂!\n"; } }; class xStudent:public Student { public: void study() { cout << "小學生學習四則運算!\n"; } }; class zStudent:public Student { public: void study(int a) { cout << "中學生學學習幾何代數!\n"; } }; int main() { xStudent x; x.study(); x.Student::study(); zStudent z; z.study(10); z.Student::study(); return 0; }
繼承中的建構函式與解構函式: 建構函式與解構函式不能被繼承 特性: 1.如果基類和派生類有預設的建構函式,編譯器會自動呼叫 2.如果需要把引數傳遞給基類的建構函式,必須定義帶引數的建構函式,且需要以派生類的初始化表的形式呼叫基類的建構函式 3.在呼叫派生類的建構函式之前,會先呼叫基類的建構函式。 4.在派生類物件被銷燬時,會先呼叫派生類自己的解構函式,再呼叫基類的解構函式 -------------------------------------------------------------------------------------------------
#include<iostream> using namespace std; class Parent { public: Parent() { a = 10; } Parent(int a):a(a) { cout << "Parent(int)" << endl; } void show() { cout << "a = " << a << endl; } ~Parent() { cout << "~Parent()" << endl; } private: int a; }; class Child:public Parent { public: Child() { b = 10; } Child(int a,int b):b(b),Parent(a) { cout << "Child(int,int)" << endl; } void show() { // cout << "a = " << a << endl; Parent::show(); cout << "b = " << b << endl; } ~Child() { cout << "~Child() " << endl; } private: int b; }; int main() { Child c(100,200); c.show(); return 0; }