vector.clear() 將 size 設置為0,capacity 不變
繼承
//公共頁面 class BasePage { public: void header() { cout << "首頁、公開課、登錄、注冊...(公共頭部)" << endl; } void footer() { cout << "幫助中心、交流合作、站內地圖...(公共底部)" << endl; } void left() { cout << "Java,Python,C++...(公共分類列表)" << endl; } }; //Java頁面 class Java : public BasePage { public: void content() { cout << "JAVA學科視頻" << endl; } }; //Python頁面 class Python : public BasePage { public: void content() { cout << "Python學科視頻" << endl; } }; //C++頁面 class CPP : public BasePage { public: void content() { cout << "C++學科視頻" << endl; } }; void test01() { //Java頁面 cout << "Java下載視頻頁面如下: " << endl; Java ja; ja.header(); ja.footer(); ja.left(); ja.content(); cout << "--------------------" << endl; //Python頁面 cout << "Python下載視頻頁面如下: " << endl; Python py; py.header(); py.footer(); py.left(); py.content(); cout << "--------------------" << endl; //C++頁面 cout << "C++下載視頻頁面如下: " << endl; CPP cp; cp.header(); cp.footer(); cp.left(); cp.content(); }
繼承的好處:減少重復的代碼
繼承方式:
1.公共繼承
2.保護繼承
3.私有繼承
#include <iostream> #include <string> using namespace std; /*繼承有三種形式 1.公共繼承 2.保護繼承 3.私有繼承 繼承方式 private繼承 protected繼承 public繼承 基類的 private 成員 不可見 不可見 不可見 基類的 protected 成員 變為private成員 仍為protected成員 仍為protected成員 基類的 public 成員 變為private成員 變為protected成員 仍為public成員 1.public 公共權限 類內可訪問,類外可訪問 2.protected 保護權限 類內可訪問,類外不可訪問,兒子可以訪問父親中的保護內容 3.private 私有權限 類內可訪問,類外不可訪問,兒子不可以訪問父親的隱私內容 */ class father { public: string m_name; protected: int m_age; private: int m_passwoard; }; class son_1 :public father { void func() { cout << m_name; cout << m_age; // cout << m_password; 未定義的標識符 } }; class son_2 :protected father { void func() { cout << m_name; cout << m_age; // cout << m_password; 未定義的標識符 } }; class son_3 :private father { void func() { cout << m_name; cout << m_age; // cout << m_password; 未定義的標識符 } }; int main() { son_2 s2; // s2.m_name; 全為保護權限,只可類內訪問,類外無法訪問 return 0; }
繼承中的對象模型
#include <iostream> #include <string> using namespace std; class Base { public: int m_A; protected: int m_B; private: int m_C; // 還會繼承下去,只是無法訪問 }; class son :public Base { public: int m_D; }; int main() { son s1; cout << sizeof(s1) << endl; system("pause"); return 0; }
// 輸出為16
繼承中的構造和析構順序
#include <iostream> #include <string> using namespace std; class Base { public: Base() { // 與其類具有相同名字的成員函數必為構造函數 cout << "Base 構造函數" << endl; } ~Base() { // 析構函數(destructor)是成員函數的一種,它的名字與類名相同,但前面要加~,沒有參數和返回值 cout << "Base 析構函數" << endl; } }; class Son :public Base { public: Son() { // 與其類具有相同名字的成員函數必為構造函數 cout << "Son 構造函數" << endl; } ~Son() { // 析構函數(destructor)是成員函數的一種,它的名字與類名相同,但前面要加~,沒有參數和返回值 cout << "Son 析構函數" << endl; } }; int main() { Base b1; cout << "--------------------" << endl; Son s1; cout << "--------------------" << endl; return 0; }
輸出結果
Base 構造函數 -------------------- Base 構造函數 Son 構造函數 -------------------- Son 析構函數 Base 析構函數 Base 析構函數
構造時,先有父類,再有子類;析構時,先析構子類,在析構父類。
繼承同名成員處理方式
1.訪問子類同名成員,直接訪問即可
2.訪問父類同名成員,需要加作用域
繼承中,同名的靜態成員的處理方式
靜態成員和非靜態成員出現同名,處理方式相同
1.訪問子類同名成員,直接訪問即可
2.訪問父類同名成員,需要加作用域
多繼承語法
在C++中,一個類繼承多個類是允許的
class 子類 : 繼承方式 父類1 ,繼承方式 父類2
在實際開發中,不建議使用多繼承
菱形繼承
概念:兩個派生類繼承同一個基類,又有某個類同時繼承這兩個派生類,這種繼承被稱為菱形繼承,或者鉆石繼承
浙公網安備 33010602011771號