97色伦色在线综合视频,无玛专区,18videosex性欧美黑色,日韩黄色电影免费在线观看,国产精品伦理一区二区三区,在线视频欧美日韩,亚洲欧美在线中文字幕不卡

pycharm網(wǎng)站開發(fā)wordpress點(diǎn)擊分享功能

鶴壁市浩天電氣有限公司 2026/01/24 07:09:56
pycharm網(wǎng)站開發(fā),wordpress點(diǎn)擊分享功能,設(shè)計(jì)素材圖片大全 psd素材,手機(jī)app開發(fā)培訓(xùn)C繼承詳解#xff1a;從概念到實(shí)戰(zhàn)應(yīng)用 1. 繼承的基本概念 1.1 什么是繼承#xff1f; 繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)中最核心的代碼復(fù)用機(jī)制。它允許我們在保持原有類特性的基礎(chǔ)上進(jìn)行擴(kuò)展#xff0c;增加新的方法和屬性#xff0c;從而產(chǎn)生新的類#xff08;派生類#xff09…C繼承詳解從概念到實(shí)戰(zhàn)應(yīng)用1. 繼承的基本概念1.1 什么是繼承繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)中最核心的代碼復(fù)用機(jī)制。它允許我們在保持原有類特性的基礎(chǔ)上進(jìn)行擴(kuò)展增加新的方法和屬性從而產(chǎn)生新的類派生類。簡單理解就像兒子繼承父親的某些特征一樣派生類可以繼承基類的成員。1.2 繼承的優(yōu)勢在沒有繼承之前我們需要重復(fù)定義相同的成員// 沒有繼承的冗余設(shè)計(jì) class Student { public: string name; // 姓名 string address; // 地址 string phone; // 電話 int age; // 年齡 void identity() { cout 學(xué)生身份驗(yàn)證 endl; } void study() { cout 學(xué)生學(xué)習(xí) endl; } }; class Teacher { public: string name; // 姓名 string address; // 地址 string phone; // 電話 int age; // 年齡 void identity() { cout 教師身份驗(yàn)證 endl; } void teaching() { cout 教師授課 endl; } };使用繼承后代碼變得簡潔// 基類包含公共成員 class Person { public: string name; // 姓名 string address; // 地址 string phone; // 電話 int age; // 年齡 void identity() { cout 身份驗(yàn)證 endl; } }; // 派生類繼承基類 class Student : public Person { public: void study() { cout 學(xué)生學(xué)習(xí) endl; } protected: int stuId; // 學(xué)號 }; class Teacher : public Person { public: void teaching() { cout 教師授課 endl; } protected: string title; // 職稱 }; int main() { Student s; Teacher t; s.identity(); // 繼承自Person類 t.identity(); // 繼承自Person類 s.study(); // Student特有方法 t.teaching(); // Teacher特有方法 return 0; }2. 繼承的定義和訪問控制2.1 繼承的定義格式class 派生類名 : 繼承方式 基類名 { // 派生類新增成員 };示例class Person { public: string name; protected: int age; private: string idCard; }; // public繼承 class Student : public Person { public: void printInfo() { name 張三; // OK: public成員在派生類中仍是public age 20; // OK: protected成員在派生類中仍是protected // idCard 123; // ERROR: private成員在派生類中不可見 } };2.2 繼承方式與訪問控制基類成員/繼承方式public繼承protected繼承private繼承public成員publicprotectedprivateprotected成員protectedprotectedprivateprivate成員不可見不可見不可見重要規(guī)則基類private成員在派生類中不可見但仍被繼承訪問權(quán)限 Min(基類中的訪問權(quán)限, 繼承方式)class默認(rèn)private繼承struct默認(rèn)public繼承2.3 實(shí)際應(yīng)用建議推薦使用public繼承其他繼承方式在實(shí)際開發(fā)中很少使用// 推薦public繼承 class Student : public Person { // ... }; // 不推薦protected/private繼承 class Student : protected Person { // 盡量避免 // ... };3. 繼承中的特殊問題3.1 隱藏規(guī)則Name Hiding當(dāng)派生類與基類有同名成員時(shí)派生類成員會(huì)隱藏基類成員class Person { protected: string name 小李子; int num 111; // 身份證號 }; class Student : public Person { public: void print() { cout 姓名: name endl; cout 身份證號: Person::num endl; // 需要指定基類作用域 cout 學(xué)號: num endl; // 訪問的是Student的num } protected: int num 999; // 學(xué)號隱藏了基類的num }; int main() { Student s; s.print(); return 0; }輸出結(jié)果姓名:小李子 身份證號:111 學(xué)號:9993.2 派生類的默認(rèn)成員函數(shù)派生類的特殊成員函數(shù)需要正確處理基類部分class Person { public: Person(const char* name peter) : name(name) { cout Person() endl; } Person(const Person p) : name(p.name) { cout Person(const Person p) endl; } Person operator(const Person p) { cout Person operator() endl; if (this ! p) { name p.name; } return *this; } ~Person() { cout ~Person() endl; } protected: string name; }; class Student : public Person { public: Student(const char* name, int num) : Person(name) // 必須調(diào)用基類構(gòu)造函數(shù) , num(num) { cout Student() endl; } Student(const Student s) : Person(s) // 調(diào)用基類拷貝構(gòu)造 , num(s.num) { cout Student(const Student s) endl; } Student operator(const Student s) { cout Student operator() endl; if (this ! s) { Person::operator(s); // 調(diào)用基類operator num s.num; } return *this; } ~Student() { // 析構(gòu)函數(shù)會(huì)自動(dòng)調(diào)用基類析構(gòu)函數(shù) cout ~Student() endl; } protected: int num; }; int main() { Student s1(張三, 1001); Student s2 s1; // 調(diào)用拷貝構(gòu)造 s2 s1; // 調(diào)用賦值運(yùn)算符 return 0; }輸出結(jié)果Person() Student() Person(const Person p) Student(const Student s) Student operator() Person operator() ~Student() ~Person() ~Student() ~Person()4. 繼承中的高級特性4.1 友元關(guān)系不能繼承class Student; class Person { public: friend void display(const Person p, const Student s); protected: string name; }; class Student : public Person { protected: int stuNum; }; void display(const Person p, const Student s) { cout p.name endl; // OK: Person的友元 // cout s.stuNum endl; // ERROR: 不能訪問Student的protected成員 } // 解決方案讓display也成為Student的友元 class Student : public Person { friend void display(const Person p, const Student s); protected: int stuNum; };4.2 靜態(tài)成員的繼承基類的靜態(tài)成員在整個(gè)繼承體系中只有一份class Person { public: string name; static int count; // 靜態(tài)成員 }; int Person::count 0; class Student : public Person { protected: int stuNum; }; int main() { Person p; Student s; cout p.count endl; // 相同地址 cout s.count endl; // 相同地址 cout Person::count endl; // 通過基類訪問 cout Student::count endl; // 通過派生類訪問 return 0; }5. 多繼承和菱形繼承問題5.1 多繼承的基本用法class Printable { public: virtual void print() 0; }; class Drawable { public: virtual void draw() 0; }; // 多繼承 class Shape : public Printable, public Drawable { public: void print() override { cout 打印形狀 endl; } void draw() override { cout 繪制形狀 endl; } };5.2 菱形繼承問題菱形繼承會(huì)導(dǎo)致數(shù)據(jù)冗余和二義性class Person { public: string name; }; class Student : public Person { protected: int stuNum; }; class Teacher : public Person { protected: int teacherId; }; class Assistant : public Student, public Teacher { protected: string majorCourse; }; int main() { Assistant a; // a.name 張三; // ERROR: 二義性不知道是Student::name還是Teacher::name a.Student::name 張三; // 需要明確指定 a.Teacher::name 李四; return 0; }5.3 虛繼承解決方案使用虛繼承解決菱形繼承問題class Person { public: string name; }; class Student : virtual public Person { // 虛繼承 protected: int stuNum; }; class Teacher : virtual public Person { // 虛繼承 protected: int teacherId; }; class Assistant : public Student, public Teacher { protected: string majorCourse; }; int main() { Assistant a; a.name 張三; // OK: 現(xiàn)在只有一份name return 0; }6. 繼承 vs 組合6.1 繼承is-a關(guān)系// Car和BMW是is-a關(guān)系 class Car { public: void drive() { cout 駕駛汽車 endl; } }; class BMW : public Car { public: void specialFeature() { cout 寶馬特色功能 endl; } };6.2 組合has-a關(guān)系// Car和Tire是has-a關(guān)系 class Tire { public: void rotate() { cout 輪胎旋轉(zhuǎn) endl; } }; class Car { private: Tire tires[4]; // 組合Car有4個(gè)Tire public: void drive() { for (auto tire : tires) { tire.rotate(); } } };6.3 選擇原則優(yōu)先使用組合組合的耦合度更低維護(hù)性更好// 推薦使用組合 class Stack { private: vectorint data; // 組合 public: void push(int value) { data.push_back(value); } void pop() { data.pop_back(); } int top() { return data.back(); } }; // 不推薦使用繼承除非確實(shí)需要is-a關(guān)系 class Stack : public vectorint { // 不推薦 public: void push(int value) { push_back(value); } void pop() { pop_back(); } int top() { return back(); } };7. 實(shí)際應(yīng)用示例7.1 實(shí)現(xiàn)一個(gè)不能被繼承的類方法1構(gòu)造函數(shù)私有化class NonInheritable { private: NonInheritable() {} // 私有構(gòu)造函數(shù) public: static NonInheritable* create() { return new NonInheritable(); } }; // class Derived : public NonInheritable {}; // ERROR: 無法訪問私有構(gòu)造函數(shù)方法2使用C11的final關(guān)鍵字class NonInheritable final { // 使用final關(guān)鍵字 // ... }; // class Derived : public NonInheritable {}; // ERROR: 不能繼承final類7.2 繼承類模板示例templatetypename T class Stack : private vectorT { // 私有繼承 public: void push(const T x) { vectorT::push_back(x); // 需要指定基類作用域 } void pop() { vectorT::pop_back(); } const T top() { return vectorT::back(); } bool empty() { return vectorT::empty(); } }; int main() { Stackint st; st.push(1); st.push(2); st.push(3); while (!st.empty()) { cout st.top() ; st.pop(); } return 0; }總結(jié)繼承是C面向?qū)ο缶幊痰暮诵奶匦哉_使用繼承可以大大提高代碼的復(fù)用性和可維護(hù)性。關(guān)鍵要點(diǎn)優(yōu)先使用public繼承避免protected/private繼承注意隱藏規(guī)則避免同名成員引起的混淆正確處理派生類的特殊成員函數(shù)確?;惒糠终_初始化避免菱形繼承如必須使用則采用虛繼承優(yōu)先選擇組合而非繼承降低耦合度使用final關(guān)鍵字防止不希望的繼承通過合理運(yùn)用繼承機(jī)制可以構(gòu)建出層次清晰、易于維護(hù)的面向?qū)ο蟪绦颉?
版權(quán)聲明: 本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請聯(lián)系我們進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

宜賓 網(wǎng)站建設(shè)正規(guī)的網(wǎng)站優(yōu)化推廣公司

宜賓 網(wǎng)站建設(shè),正規(guī)的網(wǎng)站優(yōu)化推廣公司,人才網(wǎng)站的seo怎么做,建網(wǎng)站 主機(jī)C++ 函數(shù) 引言 C++ 函數(shù)是 C++ 程序設(shè)計(jì)中的核心組成部分,它允許開發(fā)者將程序分解成多個(gè)可重用的代碼塊。本文將

2026/01/23 08:55:01

國外公司在國內(nèi)建網(wǎng)站做外匯著名網(wǎng)站

國外公司在國內(nèi)建網(wǎng)站,做外匯著名網(wǎng)站,百度免費(fèi)下載安裝百度,網(wǎng)頁制作與網(wǎng)站建設(shè)試題微信群消息自動(dòng)轉(zhuǎn)發(fā)神器#xff1a;5分鐘搞定跨群信息同步 【免費(fèi)下載鏈接】wechat-forwarding 在微信

2026/01/23 03:21:01

官網(wǎng)網(wǎng)站設(shè)計(jì)費(fèi)用做幼兒手工網(wǎng)站

官網(wǎng)網(wǎng)站設(shè)計(jì)費(fèi)用,做幼兒手工網(wǎng)站,蘇州網(wǎng)站建設(shè)推薦好先生科技,靜態(tài)網(wǎng)站怎么更新無錫短視頻創(chuàng)作電話#xff1a;企業(yè)如何通過專業(yè)代運(yùn)營實(shí)現(xiàn)營銷突破在數(shù)字化營銷浪潮中#xff0c;短視頻已成為企業(yè)品牌傳播

2026/01/23 04:08:01

jquery驗(yàn)證網(wǎng)站地址東錢湖鎮(zhèn)建設(shè)局網(wǎng)站

jquery驗(yàn)證網(wǎng)站地址,東錢湖鎮(zhèn)建設(shè)局網(wǎng)站,沈陽網(wǎng)站建設(shè)聯(lián)系方式,棗莊公司網(wǎng)站建設(shè)各位讀者搭嘎猴啊#xff0c;一份精準(zhǔn)的行業(yè)報(bào)告就像是導(dǎo)航燈塔#xff0c;引領(lǐng)我們看清行業(yè)前行的方向。言歸正傳#x

2026/01/23 10:29:01

衡水企業(yè)網(wǎng)站建設(shè)公司網(wǎng)站做支付功能難嗎

衡水企業(yè)網(wǎng)站建設(shè)公司,網(wǎng)站做支付功能難嗎,北京網(wǎng)站優(yōu)化常識,高端網(wǎng)站設(shè)計(jì)公司大模型微調(diào)新趨勢#xff1a;YOLO也能做遷移學(xué)習(xí)#xff1f; 在智能制造工廠的質(zhì)檢線上#xff0c;一臺攝像頭正實(shí)時(shí)掃

2026/01/21 18:54:01