面向物件中的過載、覆蓋和隱藏
1.過載是一個類內部實現相同機理的操作,但是操作的物件不同。主要體現在:
- 方法在同一個類中
- 過載的方法名稱相同
- 引數不同(引數的型別不同,引數的個數不同)
- virtual關鍵字可有可無
father類的DoJob方法實現了過載,其中既有引數型別不同的過載,也有引數個數不同的過載。#include "stdafx.h" #include<iostream> using namespace std; class father { public: void DoJob(int a); void DoJob(double a); void DoJob(int a, int b); void DoJob(int a, int b, int c); ~ father(); private: }; void father::DoJob(int a) { cout << "one parameter:" << a << endl; } void::father::DoJob(double a) { cout << "one double parameter:" << a << endl; } void father::DoJob(int a, int b) { cout << "two parameter: " << a << " and " << b << endl; } void father::DoJob(int a, int b, int c) { cout << "three parameter:" << a << " and " << b << " and " << c << endl; } father::~ father() { } int _tmain(int argc, _TCHAR* argv[]) { father f; f.DoJob(4); f.DoJob(4.3); f.DoJob(5, 6); f.DoJob(4, 5, 6); return 0; }
2.覆蓋,就是面向物件中的多型,是子類的方法覆蓋了基類的方法,以實現不同的功能,或者對父類的功能進行擴充。主要體現在:
- 派生類函式覆蓋基類函式
- 不同的範圍(分別位於派生類和基類中)
- 函式名稱相同
- 引數相同
- 基類函式必須有virtual關鍵字
#include "stdafx.h" #include<iostream> using namespace std; class father { public: virtual void DoJob(int a); ~ father(); private: }; void father::DoJob(int a) { cout << "one parameter in base class:" << a << endl; } father::~ father() { } class son :public father { public: void DoJob(int a); ~son(); }; void son::DoJob(int a) { cout << "one parameter in son class:" << a << endl; } son::~son() {} int _tmain(int argc, _TCHAR* argv[]) { son s; father *f = &s; f->DoJob(5); return 0; }
上述程式碼的執行結果為:
上面的程式碼中子類son中的函式DoJob()對父類father中的函式DoJob()進行了覆蓋。
3.隱藏是派生類的函式遮蔽了與其同名的基類函式。其特點主要體現在:
- 如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式都將被覆蓋。
- 如果派生類的函式與基類的函式同門,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式也將被隱蔽。還記得嗎如果此時基類函式如果有virtual,子類函式就覆蓋了父類函式。
#include "stdafx.h" #include<iostream> using namespace std; class father { public: virtual void DoJob(int a); virtual void DoJob(int a, int b); ~ father(); private: }; void father::DoJob(int a) { cout << "one parameter in base class:" << a << endl; } void father::DoJob(int a, int b) { cout << "two parameter in base class:" << a << " and " << b << endl; } father::~ father() { } class son :public father { public: void DoJob(double a); ~son(); }; void son::DoJob(double a) { cout << "one parameter in son class:" << a << endl; } son::~son() {} int _tmain(int argc, _TCHAR* argv[]) { son s; s.DoJob(1); s.DoJob(2, 3); return 0; }
對上面的程式碼進行編譯,會出現錯誤: error C2660: “son::DoJob”: 函式不接受 2 個引數,這就說明基類father中的DoJob(int a,int b)函式被隱藏了。
相關推薦
C++中過載、覆蓋和隱藏的區別,以及適用場景
一、過載、覆蓋和隱藏的區別 二、適用場景 1、過載: 適用於不同的資料型別都需要使用到的功能函式。以資料相加的函式為例,可以在同一個檔案內提供以下的過載函式以支援同樣的功能: int add(int, int);/*2個整數相加*/ int add(int, int, int);/*3個整數相
C++中過載、覆蓋和隱藏的區別
一、過載: 是函式名相同,引數列表不同 過載只是在類的內部存在。但是不能靠返回值型別來判斷。規則如下:1、相同的範圍(在同一個類中)2、函式名字相同3、引數不同4、Virtual關鍵字可有可無、二、覆蓋: 在繼承關係中,子類中定義了與父類同名的虛擬函式,從而子類自己本身定義的
面向物件中的過載、覆蓋和隱藏
1.過載是一個類內部實現相同機理的操作,但是操作的物件不同。主要體現在: 方法在同一個類中過載的方法名稱相同引數不同(引數的型別不同,引數的個數不同)virtual關鍵字可有可無 下面的程式碼對上面的說明進行解釋: #include "stdafx.h"
C++中類成員函式的過載、覆蓋和隱藏的區別,超清楚!
1.成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 2.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同;
c++中的過載、覆蓋和隱藏
引用:http://blog.csdn.net/Kendiv/archive/<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2006/04/25/675940.aspx<?xm
Java中類成員函式過載、覆蓋和隱藏的區別
其他擴充套件連結: 過載: 成員函式被過載的特徵: 1)相同的範圍:在同一個類中 2)函式名相同,引數不同 3)virtual可有可無 覆蓋: 派生函式覆蓋基類函式 1)位於不同的範圍內(子類
Java中的過載、覆蓋和隱藏
過載(overload):發生在一個類的內部,而且是針對方法而不是域而言。若方法的簽名相同,但引數的個數或者引數的型別不同,則構成了過載。但返回型別不在考慮範圍之內,也就是說,如果僅僅是返回型別不同,則構不成過載。
類成員函式的過載、覆蓋和隱藏(遮蔽)的區別
a.成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 b.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同;
java的過載、覆蓋和隱藏的區別
過載:方法名相同,但引數不同的多個同名函式 注意:1.引數不同的意思是引數型別、引數個數、引數順序至少有一個不同 2.返回值和異常以及訪問修飾符,不能作為過載的條件(因為對於匿名呼叫,會出現歧義,eg:void a ()和int a() ,如果呼叫a(),出現歧義) 3.main方
類成員函式的過載、覆蓋和隱藏區別?
#include <iostream> #include <complex> using namespace std; class Base { public: virtual void a(int x) { cout << "Base::a(int)"
類成員函式的過載、覆蓋和隱藏區別 (C++)
這是本人第一次寫部落格,主要是想記錄自己的學習過程、心得體會,一是可以方便以後回顧相關知識,二是可以與大家相互學習交流。 關於C++中類成員函式的過載、覆蓋和隱藏區別,第一次看到這個問題是在準備找工作的時候在牛客網中(http://www.nowcoder.com/questionT
類成員的函式的過載、覆蓋和隱藏的區別
參考:https://www.nowcoder.com/questionTerminal/266d3a6d4f1b436aabf1eff3156fed951.函式過載的特徵:(1)必須在同一個類中(相同範圍)(2)函式名字必須相同但是函式型別可以不相同(3)引數類表可以不同(
Performanced C++ 經驗規則(5):再談過載、覆蓋和隱藏
在C++中,無論在類作用域內還是外,兩個(或多個)同名的函式,可能且僅可能是以下三種關係:過載(Overload)、覆蓋(Override)和隱藏(Hide),因為同名,區分這些關係則是根據引數是否相同、是否帶有const成員函式性質、是否有virtual關鍵字修飾以及是否在同一作用域來判斷。在第四
C++類成員函式的過載、覆蓋和隱藏區別
成員函式被過載(overload)的特徵:相同的範圍(在同一個類中);函式名字相同;引數不同;virtual關鍵字可有可無。覆蓋是指派生類函式覆蓋(override)基類函式,其特徵是:函式名字相同;引
C++父類與子類關係以及函式過載、覆蓋和隱藏規則
今天去HTC面試,筆試考了邏輯、c語言、c++語言幾個部分,C/C++考的全是基本語法,沒有考演算法。C語言部分做的還不錯,C++部分卻做的那麼多不確定,其中大部分是C++父子類之間關係以及函式過載、覆蓋以及隱藏規則。 在C++語言中,虛擬函式是非常重要的概念,虛擬函式是
類成員函式的過載、覆蓋和隱藏區別
成員函式被過載的特徵 (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 覆蓋是指派生類函式覆蓋基類函式,特徵是 (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同; (3)引數相同; (4)基類函式
過載、覆蓋和隱藏的區別
“overload”翻譯過來就是:超載,過載,過載,超出標準負荷;“override”翻譯過來是:重置,覆蓋,使原來的失去效果。 先來說說過載(Overload)的含義,在日常生活中我們經常要清洗一些東西,比如洗車、洗衣服。儘管我們說話的時候並沒有明確地說用洗車的方式
C++類成員函式的過載、覆蓋和隱藏
成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同; (3)引
C++中成員函式的過載、覆蓋與隱藏
成員函式被過載的特徵: (1)相同的範圍(在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual關鍵字可有可無。 覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同; (3)引數相同; (4)基類函
C++中的函式過載、覆蓋與隱藏
在C++語言中,函式扮演著很重要的角色,不管面向過程設計,還是基於物件設計;不管是面向物件程式設計,還是基於泛型程式設計,函式都可以隨處而見。在談論C++中的函式過載、覆蓋和隱藏之前,先回顧下函式的基礎知識。 函式的宣告包括函式的返回值型別,函式名稱,引數列表(引數的型別、引數的個數、引數的