91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-07-28 09:38:22 來源:網絡 閱讀:402 作者:小止1995 欄目:編程語言

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

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

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

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方法絕對不能被覆蓋或者隱藏。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中阳县| 灵石县| 吉隆县| 新民市| 卫辉市| 商水县| 明水县| 吕梁市| 布尔津县| 安龙县| 稻城县| 寿宁县| 松原市| 那曲县| 汝南县| 安顺市| 隆德县| 鸡西市| 利川市| 噶尔县| 东乡| 黄浦区| 文昌市| 顺平县| 沧州市| 卢龙县| 昌图县| 安图县| 昌平区| 富宁县| 永昌县| 凌海市| 元阳县| 济南市| 贵溪市| 五大连池市| 鄂州市| 嵊州市| 尼玛县| 玉田县| 冷水江市|