bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

C++重載,覆蓋和隱藏區別

 a.成員函數被重載的特征:
(1)相同的范圍(在同一個類中);
(2)函數名字相同;
(3)參數不同;
(4)virtual 關鍵字可有可無。

石門ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為創新互聯的ssl證書銷售渠道,可以享受市場價格4-6折優惠!如果有意向歡迎電話聯系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

因為函數參數不同,可以簡單的理解為:兩個重載函數是不同的函數,調用者能夠明確

的根據不同的參數來調用不同的函數。那么如果存在這樣兩個函數,編譯器怎么處理呢?

class A
{
public:
   void Func(int a, int b=0) {printf("This is Func1/n");}
   void Func(int a) {printf("This is Func2/n");}
};

int main()
{
   A a;
   a.Func(5);
   return 0;
}

當然,對于這樣兩個函數,調用者不知道應該調用哪個函數,故編譯器直接報錯。

我們在看看,覆蓋和隱藏分別是什么特性呢?從字面意思來講,覆蓋和隱藏都具有一個把另

一個給遮住了,那只不過是誰遮誰的問題。


b.覆蓋是指派生類函數覆蓋基類函數,特征是:
(1)不同的范圍(分別位于派生類與基類);
(2)函數名字相同;
(3)參數相同;
(4)基類函數必須有virtual 關鍵字。

我們發現,這里用到了虛函數,實際上虛函數的作用,就是實現覆蓋。

c.“隱藏”是指派生類的函數屏蔽了與其同名的基類函數,規則如下:
(1)如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
(2)如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有virtual 關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)

請參看如下實例:

#pragma once
#include<iostream>
using namespace std;

class Base
{
public:
	virtual void f(float x){ cout << "Base::f(float) " << x << endl; }
	void g(float x){ cout << "Base::g(float) " << x << endl; }
	void h(float x){ cout << "Base::h(float) " << x << endl; }
};

class Derived : public Base
{
public:
	virtual void f(float x){ cout << "Derived::f(float) " << x << endl; }
	void g(int x){ cout << "Derived::g(int) " << x << endl; }
	void h(float x){ cout << "Derived::h(float) " << x << endl; }
};

void Test1()
{
	Derived  d;
	Base *pb = &d;
	Derived *pd = &d;
	pb->f(3.14f);
	pd->f(3.14f);

	pb->g(3.14f);
	pd->g(3.14f);

	pb->h(3.14f);
	pd->h(3.14f);
}

運行結果:

C++重載,覆蓋和隱藏區別

還有一點要切忌,對于static這種靜態成員函數,是屬于類的方法,而不是對象的方法,所

以static方法絕對不能被覆蓋或者隱藏。

當前題目:C++重載,覆蓋和隱藏區別
網站網址:http://vcdvsql.cn/article20/pegico.html

成都網站建設公司_創新互聯,為您提供企業網站制作、網站內鏈、網站設計公司、App開發、手機網站建設網站營銷

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計