首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

abstract 與 virtual 在 C++ 與 C# 中的異同深度比較

     編輯:關於C語言

面試一問引發的回顧

某次面試被問到「virtual base class」,才發現自己對 C++ 多重繼承中的菱形繼承解決方案已生疏。趁機整理兩大語言中 virtual、abstract 的關鍵差異。

核心概念對照表

概念C++C#
虛方法virtual 修飾,派生類可 overridevirtual 修飾方法/屬性,派生類可 override
純虛方法/抽象方法virtual void foo() = 0;(無實現)abstract void Foo();(無實現,類必須標 abstract)
抽象類包含純虛函數的類(abstract 非關鍵字)abstract class 關鍵字,可含抽象成員
虛基類class B : virtual public A 解決多重繼承菱形問題無多重繼承,故無此概念

C++ 特有機制

  • virtual base class:讓最末派生類僅保留一份間接基類實例,解決菱形繼承的資料冗余與二義性。
  • pure virtual function:以 =0 標記,強制派生類實現,構成介面契約。
  • C++ 中 abstract 只是稱呼,非關鍵字。

C# 的設計哲學

  • virtual 權力下放:僅用於標記可覆寫成員,多態相關權力被 interface、abstract 分流。
  • abstract 全能修飾:可用於 class、method、property、indexer、event,專司「定義門面」。
  • 單繼承 + 多介面實現,徹底避開菱形繼承,故無 virtual base class 需求。

總結

C++ 以 virtual 一統多態與菱形解決;C# 將「契約定義」剝離給 abstract/interface,語義更清晰。理解兩者差異,有助於跨語言架構設計與遷移重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved