面試題16——簡述類成員函式的重寫,過載和隱藏的區別
重寫與過載主要有以下不同:
(1)範圍的區別:被重寫的和重寫的函式在兩個類中,而過載和被過載的函式在同一個類中;
(2)引數的區別:被重寫函式和重寫函式的引數列表一定相同,而被過載函式和過載函式的引數列表一定不同;
(3)virtual的區別:重寫的基類中被重寫的函式必須要有virtual修飾,而過載函式和被過載函式可以被virtual修飾,也可以沒有
隱藏和重寫,過載有以下不同:
(1)與過載的範圍不同:和重寫一樣,隱藏函式和被隱藏函式不在同一個類中;
(2)引數的區別:隱藏函式和被隱藏的函式的引數列表可以相同也可以不同,但是函式名肯定要相同。當引數不同時,無論基類的引數是否被virtual修飾,基類的函式都是被隱藏,而不是被重寫。
雖然過載和覆蓋都是實現多型的基礎,但是兩者實現的技術完全不相同,達到的目的也是完全不同的。覆蓋是動態繫結的多型,過載是靜態繫結的多型。
相關推薦
面試題16——簡述類成員函式的重寫,過載和隱藏的區別
重寫與過載主要有以下不同: (1)範圍的區別:被重寫的和重寫的函式在兩個類中,而過載和被過載的函式在同一個類中; (2)引數的區別:被重寫函式和重寫函式的引數列表一定相同,而被過載函式和過載函式的引數列表一定不同; (3)virtual的區別:重寫的基類中被重寫的函式必須要有virtual修
類成員函式轉換成void (*)和靜態成員函式獲取非靜態成員變數的方法
很多第三方函式需要把函式轉換成void(*)型別,如libevent 1.4版本中的event_set函式: 如果要傳遞類成員函式給相應的函式我們應該怎樣處理呢? 僅僅傳遞類成員函式可以嗎? 不可以的!編譯的時候會遇到下面的錯誤: cannot convert DataWa
C++(多型實現原理)函式重寫,過載,重定義
多型的實現原理: 首先介紹下函式重寫 重定義 過載的區別; 函式重寫: 發生在父類和子類之間,子類將父類中的同名函式進行了覆蓋,如果在函式前面含有virtual那麼就是重寫,如果沒有就成了覆蓋,子類的同名函式將會覆蓋(隱藏)父類的同名
面試題-面向物件-靜態成員變數以及靜態成員函式
問題1:問:在類中,靜態資料成員和普通資料成員有何區別? 答: 1.普通資料成員屬於類的物件,物件被建立後,普通資料成員才會分配記憶體。靜態資料成員屬於整個類,即使沒有建立物件,它也存在。 2.只能
C/C++面試題:編寫類String的建構函式、解構函式和賦值函式。
考點:建構函式、解構函式和賦值函式的編寫方法出現頻率:☆☆☆☆☆已知類String的原型為: class String { public: String(const char *str = NULL);
C++ 類成員函式的過載(overload),重寫/覆蓋(override),隱藏
C++ 類層次中的同名函式,有三種關係: 過載(overload) 重寫、覆蓋(override) 隱藏(hide,oversee) 過載 c++函式過載 相同的範圍(在同一個類中)
類成員函式中過載/重寫(覆蓋)/重定義(隱藏)的區別
先來說說過載的含義,在日常生活中我們經常要清洗一些東西,比如洗車、洗衣服。儘管我們說話的時候並沒有明確地說用洗車的方式來洗車,或者用洗衣服的方式來洗一件衣服,但是誰也不會用洗衣服的方式來洗一輛車,否則等洗完時車早就散架了。我們並不要那麼明確地指出來就心知肚明,這就有過載的意思了。在同一可訪問區內被聲名的幾個具
js面試題-----通信類
log 技術分享 sof 事件 嵌入 sage list 通信 als 題目1:什麽是同源策略及限制 題目2:前後端如何通信 Ajax WebSocket CORS 題目3:如何創建Ajax XMLHttpRequest對象的工作流程 兼容性處理
面試題16:數值的整數次方
指數 遞歸 試題 family nes style signed 類型 turn // 面試題16:數值的整數次方 // 題目:實現函數double Power(double base, int exponent),求base的exponent // 次方。不得使用庫函數
從阿里巴巴面試題到java類載入機制
首先很經典的阿里巴巴面試題 加上我自己的一些疑惑程式碼 public class Text { public static int k = 0; public final int k1 = 3; //自己加的 public static Text t1 = new Text("
指向類成員函式的指標並非指標
指向類成員函式的指標並非指標 參考<<C++必知必會>>的相關章節 "指向類成員函式的指標",這個術語中包含了"類成員函式"的術語,但是嚴格的說,這裡的成員函式只是指非靜態成員函式,這個術語中還包含了"指標"這個術語,但是嚴格的說,它即不包含地址,行為也不象指標,說
面試題:不通過建構函式也能建立物件嗎
不通過建構函式也能建立物件嗎 A. 是 B. 否 答案:A 解析:Java 建立物件的幾種方式(重要): (1) 用 new 語句建立物件,這是最常見的建立物件的方法。 (2) 運用反射手段,呼叫 java.lang.Class 或者 java.l ang.reflect.Constru
常用的CPaintDC類成員函式
參考:http://blog.sina.com.cn/s/blog_50eb38e00100amhe.html 1.文字資訊顯示 BOOL TextOut(int x, int y
C++中 執行緒函式為靜態函式 及 類成員函式作為回撥函式
執行緒函式為靜態函式: 執行緒控制函式和是不是靜態函式沒關係,靜態函式是在構造中分配的地址空間,只有在析構時才釋放也就是全域性的東西,不管執行緒是否執行,靜態函式的地址是不變的,並不在執行緒堆疊中static只是起了一個裝飾的作用,所以二者並沒有必然的關係 執行緒也是一種
面試題17——簡述多型實現的原理
編譯器發現一個類中有虛擬函式,便會立即為此類生成虛擬函式表vtable。虛擬函式表的各表項為指向對應虛擬函式的指標。編譯器還會為此類中隱含插入一個指標vptr(對vc編譯器說,它插在類的第一位置上)指向虛擬函式表。呼叫此類的建構函式時,在類的建構函式中,編譯器會隱含執行vptr與vtable
面試題10——簡述strcpy,sprintf,memcpy的區別
三者主要有一下不同之處: (1)操作物件不同: strcpy的兩個操作物件均是字串 sprintf的操作源物件可以是多種資料型別,目的操作物件是字串 memcpy的兩個物件就是兩個人一可操作的記憶體地址,不限於何種資料型別。 (2)執行效率不同: memcpy最高,strcpy次之,spri
面試題9——簡述C,C++程式編譯的記憶體分配情況
一個C,C++程式編譯時記憶體分為5大儲存區:堆區,棧區,全域性區,文字常量區,程式程式碼區。 C,C++中記憶體分配方式可以分為三種: (1)從靜態儲存區域分配: 記憶體在程式編譯時就已經分配好,這塊記憶體在程式的整個執行期間都存在。例如全域性變數,static變數等。 (2)在棧上分
劍指offer:面試題16
面試題16:反轉連結串列:需要注意三個問題:1、輸入的連結串列頭指標為None;2、整個連結串列只有一個結點時 ;3、反轉後的連結串列出現斷裂,返回的翻轉之後的頭節點不是原始連結串列的尾結點。因此需要引入一個翻轉後的頭結點,以及一個指向當前結點的指標,一個指向當前結點前一個結
類成員函式過載與函式指標
在有成員函式過載的情況下該如何使用函式指標呢 class l { public: void func(); void func(int, int); }; void l::func() { cout << "func()" << endl; }
面試題_抽象類和介面的區別
含有abstract修飾符的class 即為抽象類。abstract類不能建立例項物件;含有abstract的方法的類必須定義為abstract class ;abstract class 裡的方法不必是抽象的;抽象類中定義抽象方法必須放在具體子類中實現;所以呀,不能有抽象的