多態的理解:
是一個物件導向新需求:
根據實際的物件類型來判斷重寫函數的呼叫
如果父類別指標指向的是父類別物件則呼叫父類別中定義的函數
如果父類別指標指向的是父類別物件則呼叫父類別中定義的函數
如果父類別指標指向的是子類別物件則呼叫子類別中定義的重寫函數
解決方案:
Ø C++中透過virtual關鍵字對多態進行支援
Ø 使用virtual聲明的函數重寫後即可展現多態性特性
//物件導向3大概念
封裝
突破了C語言函數的概念。 。
繼承
程式碼復用 。 。 。 。我復用原來寫好的程式碼。 。 。
多態
多態可以使用未來。 。 。 。 。 80年代寫了一個框架。 。 。 。 。 。 90年代人寫的程式碼
多態是我們軟體產業追尋的一個目標。 。 。
//寫了一個框架,可以呼叫後來人,寫的程式碼的能力
進一步的理解
//間接賦值成立的3個條件:
//1 定義兩個變數。 。 。
//2 建立關聯 。 。 。 。
//3 *p
//多態成立的三個條件:
//1 要有繼承
//2 要有函數重寫。 。 。 C 虛函數
//3 要有父類指標(父類參考)指向子類物件
//多態是設計模式的基礎,多態是框架的基礎
知識點1 虛析構函數
析構函數是為了釋放資源,
當釋放資源時有需求不能直接對物件釋放時如:
C *myC = new C; //C繼承B,B繼承A類
delete myC; / /直接透過子類物件釋放資源這種情況不需要寫virtual 關鍵字
需要透過父類指標將所有的子類都物件的析構函數都執行一遍
想透過父類指標釋放所有的子類資源(需要在最終父類的析構函數中加上virtual關鍵字)
void howtodelete(A *base) { delete base; //这句话不会表现成多态 这种属性 }
知識點2:重載和重寫區別
函數重載
必須在同一類中進行
子函數重載
必須在同一類中進行
子類別無法重載父類別的函數,父類別同名函數會被名稱覆蓋(例如:父類別中有函數a(),子類別中也有函數a(),但是還有函數a(int b)這個函數就是重載父類別函數產生錯誤!類別與子類別中的函數必須有完全相同的原型
使用virtual聲明之後能夠產生多態性(如果不使用virtual,那叫重定義)
多態是在運行期間根據具體物件的類型決定函數調用
範例分析:
//1 C++编译器 看到func名字 ,因子类中func名字已经存在了(名称覆盖).所以c++编译器不会去找父类的4个参数的func函数 //2 c++编译器只会在子类中,查找func函数,找到了两个func,一个是2个参数的,一个是3个参数的. //3 C++编译器开始报错..... error C2661: “Child::func”: 没有重载函数接受 4 个参数 //4 若想调用父类的func,只能加上父类的域名..这样去调用.. c1.func(1, 3, 4, 5); //c1.func(); //func函数的名字,在子类中发生了名称覆盖;子类的函数的名字,占用了父类的函数的名字的位置 //因为子类中已经有了func名字的重载形式。。。。 //编译器开始在子类中找func函数。。。。但是没有0个参数的func函数
3 重點:
C++中多態的實作原理
當類別中宣告虛函數時,編譯器會在類別中產生一個虛函數表
類別成員函數指標的資料結構
虛函數表是由編譯器自動產生與維護的
virtual成員函數會被編譯器放入虛擬函數表中
存在虛函數時,每個物件中都有一個指向虛擬函數表的指標(vptr指標)
說明1:
透過虛函數表所調用操作才能確定真正應該呼叫的函數。而普通成員函數是在編譯時就決定了呼叫的函數。在效率上,虛函數的效率要低很多。
說明2:
出於效率考慮,沒有必要將所有成員函數都宣告為虛擬函數
說明3 :C++編譯器,執行HowToPrint函數,不需要區分是子類別物件還是父類別物件
以上就是C++複習要點總結之十-多型(一)的內容,更多相關內容請關注PHP中文網(www.php.cn)!

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#和.NET通過不斷的更新和優化,適應了新興技術的需求。 1)C#9.0和.NET5引入了記錄類型和性能優化。 2).NETCore增強了雲原生和容器化支持。 3)ASP.NETCore與現代Web技術集成。 4)ML.NET支持機器學習和人工智能。 5)異步編程和最佳實踐提升了性能。

c#.netissutableforenterprise-levelapplications withemofrosoftecosystemdueToItsStrongTyping,richlibraries,androbustperraries,androbustperformance.however,itmaynotbeidealfoross-platement forment forment forment forvepentment offependment dovelopment toveloperment toveloperment whenrawspeedsportor whenrawspeedseedpolitical politionalitable,

C#在.NET中的編程過程包括以下步驟:1)編寫C#代碼,2)編譯為中間語言(IL),3)由.NET運行時(CLR)執行。 C#在.NET中的優勢在於其現代化語法、強大的類型系統和與.NET框架的緊密集成,適用於從桌面應用到Web服務的各種開發場景。

C#是一種現代、面向對象的編程語言,由微軟開發並作為.NET框架的一部分。 1.C#支持面向對象編程(OOP),包括封裝、繼承和多態。 2.C#中的異步編程通過async和await關鍵字實現,提高應用的響應性。 3.使用LINQ可以簡潔地處理數據集合。 4.常見錯誤包括空引用異常和索引超出範圍異常,調試技巧包括使用調試器和異常處理。 5.性能優化包括使用StringBuilder和避免不必要的裝箱和拆箱。

C#.NET應用的測試策略包括單元測試、集成測試和端到端測試。 1.單元測試確保代碼的最小單元獨立工作,使用MSTest、NUnit或xUnit框架。 2.集成測試驗證多個單元組合的功能,常用模擬數據和外部服務。 3.端到端測試模擬用戶完整操作流程,通常使用Selenium進行自動化測試。

C#高級開發者面試需要掌握異步編程、LINQ、.NET框架內部工作原理等核心知識。 1.異步編程通過async和await簡化操作,提升應用響應性。 2.LINQ以SQL風格操作數據,需注意性能。 3..NET框架的CLR管理內存,垃圾回收需謹慎使用。

C#.NET面試問題和答案包括基礎知識、核心概念和高級用法。 1)基礎知識:C#是微軟開發的面向對象語言,主要用於.NET框架。 2)核心概念:委託和事件允許動態綁定方法,LINQ提供強大查詢功能。 3)高級用法:異步編程提高響應性,表達式樹用於動態代碼構建。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中