【C++grammar】訪問控制與抽象類與純虛函數

目錄

  • 一、訪問控制 (可見性控制)
    • 1.private、public、protected關鍵字
    • 2.關鍵字示例
      • 1、關鍵字對類數據成員訪問的限制
    • 3. 公有繼承
    • 4. 私有繼承
    • 5. 保護繼承
    • 6. 私有繼承和保護繼承的區別
  • 二、抽象類與純虛函數
    • 1.什么是抽象類
    • 2.抽象函數/純虛函數
    • 3.抽象類示例

一、訪問控制 (可見性控制)

1.private、public、protected關鍵字

1、the private and public keywords:

1、說明數據及函數是否可以從類外面訪問
2、私有成員只能在類內的函數訪問
3、公有成員可被任何其他類訪問

2、the **protected ** keywords:
護屬性的數據或函數可被派生類成員訪問

2.關鍵字示例

1、關鍵字對類數據成員訪問的限制

#include <iostream>
using namespace std;
class A {
public:       // 訪問屬性int i;
protected:int j;
private:int k;
};
class B: public A {        // 此public為派生方式
public:       // 訪問屬性void display() {cout << i << endl; // OK, can access icout << j << endl; // OK, can access jcout << k << endl; // Error! cannot access k}
};
int main() {A a;cout << a.i << endl; // OK, can access a.icout << a.j << endl; // Error, cannot access a.jcout << a.k << endl; // Error, cannot access a.k
}

3. 公有繼承

公有繼承的派生類定義形式:

class Derived:public Base{ 派生類新成員定義; };

(1) 基類成員 在派生類中的訪問屬性不變。
(2) 派生類的成員函數 可以訪問基類的公有成員和保護成員,不能訪問基類的私有成員;
(3) 派生類以外的其它函數 可以通過派生類的對象,訪問從基類繼承的公有成員, 但不能訪問從基類繼承的保護成員和私有成員。
在這里插入圖片描述

4. 私有繼承

私有繼承的派生類定義形式:
class Derived:private Base{ 派生類新成員定義; };

(1) 基類成員 在派生類中都變成== private==。
(2) 派生類的成員函數 可以訪問基類的公有成員和保護成員,不能訪問基類的私有成員;
(3) 派生類以外的其它函數 不能通過派生類的對象,訪問從基類繼承的任何成員。
在這里插入圖片描述

5. 保護繼承

保護繼承的派生類定義形式:
class Derived:protected Base{ 派生類新成員定義; };

(1) 基類成員 公有成員和保護成員變成protected,私有成員不變。
(2) 派生類的成員函數 可以訪問基類的公有成員和保護成員,不能訪問基類的私有成員;
(3) 派生類以外的其它函數 不能通過派生類的對象,訪問從基類繼承的任何成員。
在這里插入圖片描述

6. 私有繼承和保護繼承的區別

在這里插入圖片描述

二、抽象類與純虛函數

1.什么是抽象類

類太抽象以至于無法實例化就叫做抽象類。

2.抽象函數/純虛函數

從繼承鏈上來看:
1、派生類時,新類會越來越明確和具體
2、沿著派生類向父類移動,類會越來越一般化和抽象
3、如果我們沿著繼承鏈一直往上找,遇到了一個類,這個類十分抽象以至于無法實例化,那么我們稱這個類為抽象類。
成員函數應出現在哪個繼承層次?
假設有個Shape類,它有兩個派生類:rectangle、circle
rectangle、circle都可以求面積,都有一個getArea()函數。
對于getArea()函數的放置,我們有兩個選擇:

1、放哪兒都行,既可以放在基類Shape也可以放在子類中定義
2、Shape類定義中getArea()函數,并且強制要求Shape的子類必須實現getArea()

對于第二種方法,怎么實現強制要求呢?C++給出了抽象函數的概念:
抽象函數(abstract function) 也被稱為純虛函數(pure virtual function)
抽象函數要求子類實現它:

virtual double getArea() =0 ; //在Shape類中,注意這里不是大括號,而是替換為=0,純虛函數的“純”就體現于此

Circle子類必須實現getArea()純虛函數才能實例化。

子類從基類將純虛函數繼承過來,如果不進行重新實現這個函數,那么此時的子類也將是一個抽象類,不能實例化。
并且要在函數后面加上override,表明是對抽象函數的覆寫。
在這里插入圖片描述

注意:純虛函數不需要定義函數體也不能定義函數體

3.抽象類示例

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377709.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377709.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377709.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongodb 如何刪除 字段值為 json對象中的某個字段值

例如&#xff1a; { attributes: { birthday:1988-01-01, name: aq } } birthday是attributes字段的value的一個字段&#xff0c; 我要刪除birthday 用這句話&#xff1a; db.User.update({email:adminlinkris.com},{$unset:{attributes.birthday:}})轉載于:https://www.cnblog…

使用 Spring 的 Web 服務模擬器框架解決方案

http://www.ibm.com/developerworks/cn/web/wa-aj-simulator/index.html轉載于:https://www.cnblogs.com/diyunpeng/archive/2012/02/28/2371390.html

三、上傳織物圖片至SQL Server并提供name進行展示織物照片

一、數據庫的建立 還是在fiber_yy數據庫下創建images表 images表設計如下 二、頁面完善設計 main_page頁面進行功能完善 入庫管理系統 warehousing頁面 庫存查詢系統 query頁面 登錄注冊頁面前面幾個博文已經實現過了&#xff0c;這里就再贅述了&#xff0c;仍是沿用前…

gettype_PHP gettype()函數與示例

gettypePHP gettype()函數 (PHP gettype() function) In PHP, we have a library function gettype() to identify the type of data. The function is primarily used to sanity check the type of data being input in a variable. The function can identify the data into …

ARM MMU工作原理剖析[轉]

一、MMU的產生 許多年以前&#xff0c;當人們還在使用DOS或是更古老的操作系統的時候&#xff0c;計算機的內存還非常小&#xff0c;一般都是以K為單位進行計算&#xff0c;相應的&#xff0c;當時的程序規模也不大&#xff0c;所以內存容量雖然小&#xff0c;但還是可以容納當…

棧與隊列在SGI STL的底層實現

棧 棧提供push和pop等接口&#xff0c;不提供走訪功能&#xff0c;也不提供迭代器。 STL中棧不被歸類為容器&#xff0c;而被歸類為container adapter(容器適配器)&#xff0c;這是因為棧是以底層容器完成其所有的工作&#xff0c;對外提供統一的接口&#xff0c;底層容器是可…

【原創】SharePoint Document library List Check out 文檔時碰到的問題解決

環境&#xff1a;TFS(Team Foundation Server)集成的WSS 3.0&#xff08;SharePoint Service 3.0&#xff09; 問題&#xff1a;如題&#xff0c;祥見下圖 解決&#xff1a;一般碰到沒有經驗的問題&#xff0c;大家當然是外事不決問谷歌了&#xff0c;于是谷歌搜到了這篇博客 h…

getdate函數_PHP getdate()函數與示例

getdate函數PHP getdate()函數 (PHP getdate() function) getdate() function is used to get the local date/time (or it is also used to get the date/time based on the given timestamp. getdate()函數用于獲取本地日期/時間(或也用于根據給定的時間戳獲取日期/時間。 S…

四、入庫管理功能的完善

一、數據庫的創建 在fiber_yy數據庫下創建yy_textile表 先隨便添加幾條數據 二、頁面的完善 登錄注冊頁面我就不演示了&#xff0c;前幾篇博文也都有介紹 warehousing入庫頁面 main_page頁面進行功能完善 三、代碼實現 warehousing頁面 using System; using System.…

leetcode 232. 用棧實現隊列 思考分析

題目 請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列的支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 實現 MyQueue 類&#xff1a; void push(int x) 將元素 x 推到隊列的末尾 int pop() 從隊列的開頭移除并返回元素 int peek() 返…

YCSB初步介紹

隨著大數據時代的到來和云計算的不斷發展&#xff0c;作為云計算最基礎的設施存儲產品也越來越多&#xff0c;開源分布式存儲系統有BigTable-like系統HBase&#xff0c;dynamo-like系統Cassandra&#xff0c;voldemort&#xff0c;Riak&#xff0c;淘寶開源的OceanBase等。當然…

kotlin實現繼承_Kotlin程序| 繼承的例子

kotlin實現繼承遺產 (Inheritance) Inheritance is a mechanism wherein a new class is derived from an existing class. 繼承是一種機制&#xff0c;其中新類是從現有類派生的。 All Kotlin Classes have a common Superclass Any, it is the Default Superclass with no S…

【C++grammar】動態類型轉換、typeid與RTTI

目錄動態類型轉換1、為何需要動態類型轉換2、dynamic_cast<>();運算符3、向上轉換和向下轉換( Upcasting and Downcasting)4、 基類對象和派生類對象的互操作5、Upcasting/Downcasting與繼承鏈上不同類的對象之間的賦值有什么關系和區別&#xff1f;typeid 運行時查詢類型…

nginx資源定向 css js路徑問題

今天玩玩項目&#xff0c;學學nginx發現還不錯&#xff0c;速度還可以&#xff0c;但是CSS JS確無法使用&#xff0c;原來Iginx配置時需要對不同類型的文件配置規則&#xff0c;真是很郁悶&#xff0c;不過想想也還是很有道理。閑暇之際&#xff0c;把配置貼上來。#user nobody…

五、庫存查詢功能的完善

一、數據庫的建立 由于查詢功能和之前的 入庫管理功能 所用的數據庫都一樣&#xff0c;這里仍使用yy_textile表 在fiber_yy數據庫下創建yy_textile表 初始數據庫信息 二、頁面的完善 登錄注冊頁面我就不演示了&#xff0c;前幾篇博文也都有介紹 query查詢頁面 main_page…

整合ajaxmin 和 less 到VS.net

我用的前端框架是bootstrap_extra, twitter團隊做的&#xff0c;這個是他的一個擴展&#xff0c;首先從上面下載一個。至于ajaxmin&#xff0c;請參考這里1) 從bootstrap_extra的解壓包中&#xff0c;復制build目錄下三個文件到項目中去&#xff0c;這三個文件分別是BatchSubsi…

轉:只能選擇GridView中的一個CheckBox(單選CheckBox)

方法1&#xff1a; protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e){CheckBox cbx e.Row.FindControl("cbID") as CheckBox;try{//綁定選中CheckBox 客戶端IDcbx.Attributes.Add("onclick", "Change(" cbx.Cli…

六、出庫管理功能的實現

一、數據庫的建立 這里仍使用yy_textile表 在fiber_yy數據庫下創建yy_textile表 初始數據庫信息 二、頁面的完善 登錄注冊頁面我就不演示了&#xff0c;前幾篇博文也都有介紹 shipment出庫管理頁面 main_page頁面進行功能完善 三、代碼實現 shipment出庫管理頁面 u…

數學建模:層次分析法實例以及代碼

博主聯系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里會有往屆的smarters和電賽選手&#xff0c;群里也會不時分享一些有用的資料&#xff0c;有問題可以在群里多問問。 目錄層次分析法的思想層次分析法步驟具體案例(市政工程項目建設決策)1.問題提出2.…

c 僵尸進程_演示僵尸進程的C程序

c 僵尸進程僵尸進程 (Zombie process) A process which has finished its execution but still has an entry in the process table to report to its parent process is known as a zombie process. 一個已經完成執行但仍在進程表中具有要報告給其父進程的條目的進程稱為僵尸進…