C 特性之繼承分析

2021-09-24 19:11:57 字數 1818 閱讀 7220

私有繼承的作用

多繼承非菱形多繼承

c++繼承分為,公有繼承、保護繼承、私有繼承,下面通過例子來分析下三種繼承各自的特性。

首先我們先定義乙個基類,此基類包含有三種成員,分別為公有成員,保護成員,私有成員。

class parent

protected:

void

printprotected()

private:

void

printprivate()

};

下面我們定義乙個子類,這個類通過公有繼承實現。

class childpublic : public parent

};

我們可以看到基類的公有成員和保護成員可以在子類的內部訪問,但是私有成員在子類內部是無法訪問的。再來看下公有繼承下子類物件對於基類中成員的訪問情況。

childpublic ch1;

ch1.

printpublic()

;// ch1.printprotected(); // 保護成員,不能訪問

// ch1.printprivate(); // 私有成員,不能訪問

很顯然,因為公有繼承不改變類成員的成員屬性,所以公有成員可通過子類的物件,保護成員和私有成員不能通過子類的物件訪問。

class childprotected : protected parent

};

我們可以看到基類的公有成員和保護成員可以在子類的內部訪問,但是私有成員在子類內部是無法訪問的。和公有繼承有相同的屬性。再來看下保護繼承下子類物件對於基類中成員的訪問情況。

childprotected ch1;

// ch1.printpublic(); // 保護成員,不能訪問

// ch1.printprotected(); // 保護成員,不能訪問

// ch1.printprivate(); // 私有成員,不能訪問

可以看到,基類中的公有成員通過保護繼承後,子類物件不能訪問基類的公有成員了,因為通過保護繼承規則,基類的公有成員的成員屬性變成了保護屬性了,基類原有的保護成員和私有成員通過保護繼承則保持原來的成員屬性不變。

class childprivate : private parent

};

我們可以看到基類的公有成員和保護成員可以在子類的內部訪問,但是私有成員在子類內部是無法訪問的。和公有繼承有相同的屬性。再來看下私有繼承下子類物件對於基類中成員的訪問情況。

childprivate ch1;

ch1.

printpublic()

;// 私有成員,不能訪問

ch1.

printprotected()

;// 私有成員,不能訪問

ch1.

printprivate()

;// 私有成員,不能訪問

可以看到,基類中的公有成員通過私有繼承後,子類物件不能訪問基類的私有成員了,因為通過私有繼承規則,基類的公有成員和保護成員的成員屬性變成了私有屬性了,基類私有成員通過私有繼承則保持原來的成員屬性不變。

總結:

三種繼承均有以下四個結論:

1、基類的公有成員可以在子類內部訪問

2、基類的保護成員可以在子類內部訪問

3、基類的私有成員不能在子類內部訪問

4、基類成員能否通過子類物件訪問,則要根據基類的成員通過三種繼承後在子類中所表現出的成員屬性,依照c++類成員可訪問性的基本規則。

c 三大特性之 繼承

繼承 乙個非常自然的概念,現實中的很多事情都是具有繼承性的。類似於自己繼承父母的特性,這也是繼承的特性 而繼承的上層稱為基類,下一層就叫做派生類。格式 class 派生類 繼承方式 基類 繼承 例如 include using namespace std class person class stu...

C 特性 繼承

學習c 有一段時間了,今天就來總結一下c 的第二個特性 繼承。首先介紹一下繼承的概念,所謂的繼承就是用已有的類 基類 根據實際需要定義新的類 派生類 的過程,其實質是 復用。繼承關係如下圖所示 當然,派生類的資料並不是全部來自於基類,也可以根據需要在派生類中新增額外的成員變數和成員方法。繼承的語法結...

C 三大特性之繼承簡述

一 概念 派生類,基類 protected的成員,只能在成員方法中訪問 預設繼承方式為private 二 例項化方式 1 堆中例項化物件 worker p new worker delete p delete手動釋放記憶體,否則記憶體洩漏 p null 將指標至於安全狀態 2 棧中例項化物件 wor...