日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++(六)——继承

發布時間:2025/3/21 c/c++ 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++(六)——继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼承中的對象模型

#include<iostream> 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; }; void test01() {//結果16//父類中所有非靜態成員屬性都會被子類繼承下去//私有屬性雖然無法訪問,但仍然繼承了cout << "size of Son = " << sizeof(Son) << endl; }int main() {test01();return 0; }

構造和析構順序

#include<iostream> using namespace std; //繼承中的構造與析構函數 class Base { public:Base() {cout << "這是Base構造函數" << endl;}~Base() {cout << "這是Base析構函數" << endl;} };class Son :public Base { public:Son() {cout << "這是Son構造函數" << endl;}~Son() {cout << "這是Son析構函數" << endl;}}; void test01() {//Base b;//繼承中的構造順序,先構造父類,再構造子類。析構時順序相反Son s;}int main() {test01();return 0; }

同名成員處理

#include<iostream> using namespace std; class Base { public:Base() {m_a = 100;}void func() {cout << "this is Base func" << endl;}void func(int a) {cout << "this is Base func(int)" << endl;};int m_a; };class Son :public Base { public:int m_a;Son() {m_a = 200;}void func() {cout << "this is Son func" << endl;} };void test01() {Son s;cout << "Son的m_a = " << s.m_a << endl;//如果通過子類對象訪問父類中的同名成員需要加一個作用域cout << "Base的m_a = " << s.Base::m_a << endl; }void test02() {Son s;//若要訪問父類的同名成員函數也能加作用域s.Base::func(100);//如果子類中存在同名成員函數,則父類同名全被隱藏,只能通過作用域訪問 }int main() {test01();test02();return 0; }

同名靜態成員處理

#include <iostream> using namespace std; //繼承中的同名靜態成員處理方式 class Base { public:static int m_a;static void func() {cout << "base ——func" << endl;}static void func(int a) {cout << "base ——func(int)" << endl;}}; //類內聲明,類外初始化 int Base::m_a = 100;class Son :public Base { public:static int m_a;static void func() {cout << "son ——func" << endl;} }; int Son::m_a = 1000; //同名靜態成員屬性 void test01() {//通過對象訪問數據Son s;cout << "Son 下m_a = " << s.m_a << endl;cout << "Base 下m_a = " << s.Base::m_a << endl;//同過類名訪問cout << "通過類名訪問:" << endl;cout << "Son 下m_a = " << Son::m_a << endl;//第一個::代表通過類名方式訪問 第二個::代表訪問父類作用域下cout << "Base 下m_a = " << Son::Base::m_a << endl; } //同名靜態成員函數 void test02() {//1.通過對象訪問Son s;s.func();s.Base::func();//2.通過類名訪問Son::func();Son::Base::func(1000);}int main() {//test01();test02();return 0; }

繼承語法

#include<iostream> using namespace std; //class Java { //public: // void header() { // cout << "公開課,登錄注冊" << endl; // } // void footer() { // cout << "幫助中心、交流合作、站內地圖" << endl; // // } // void left() { // cout << "java, python, c++" << endl; // // // } // void content() { // cout << "this is java" << endl; // } // //}; // //class Python { //public: // void header() { // cout << "公開課,登錄注冊" << endl; // } // void footer() { // cout << "幫助中心、交流合作、站內地圖" << endl; // // } // void left() { // cout << "java, python, c++" << endl; // // // } // void content() { // cout << "this is Python" << endl; // } // //}; 代碼重復性太高 class BasePage { public:void header() {cout << "公開課,登錄注冊" << endl;}void footer() {cout << "幫助中心、交流合作、站內地圖" << endl;}void left() {cout << "java, python, c++" << endl;} };//繼承的好處:減少重復的代碼 //語法:class 子類:繼承方式 父類 //子類也叫派生類 //父類也叫基類 class Java :public BasePage { public:void content() {cout << "this is Java" << endl;} };class Python :public BasePage { public:void content() {cout << "this is Python" << endl;} };void test01() {Java ja;ja.header();ja.footer();ja.left();ja.content();cout << "--------------------------"<< endl;Python py;py.header();py.footer();py.header();py.content();cout << "--------------------------" << endl; }int main() {test01();return 0; }

菱形繼承

#include<iostream> using namespace std; class Animal { public:int m_Age; }; //繼承時加上關鍵字virtual class Sheep:virtual public Animal {};class Tuo :virtual public Animal {};class Yang :public Sheep, public Tuo {}; void test01() {Yang s1;s1.Sheep::m_Age = 12;s1.Tuo::m_Age = 16;//虛繼承后相同數據是共享的//當菱形繼承時,父類有相同成員屬性時,可以添加作用域區分cout << "sheep::m_age = " << s1.Sheep::m_Age << endl;cout << "Tuo::m_age = " << s1.Tuo::m_Age << endl;//菱形繼承導致數據有兩份導致資源浪費,利用虛繼承可以解決問題 } int main() {test01();return 0; }

總結

以上是生活随笔為你收集整理的C++(六)——继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。