中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C++類的繼承和派生及指針安全如何引用

發布時間:2022-03-11 09:51:55 來源:億速云 閱讀:193 作者:iii 欄目:開發技術

本篇內容主要講解“C++類的繼承和派生及指針安全如何引用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++類的繼承和派生及指針安全如何引用”吧!

一、繼承和paisheng

1、繼承和派生的基礎概念

繼承指從現有類獲得其特性,派生指從已有類產生新的類。原有的類稱為基類或父類,新生的類稱為子類或派生類。當子類只有一個父類時稱為單繼承,當子類含有多個父類時稱為多繼承。如果基類A直接參與了派生類B的派生過程,那么A類稱為直接基類;基類的基類稱為間接基類。

2、如何定義子類

定義子類時,需要指明其父類,及對父類的繼承方式(publicprivateprotect):

class 子類名: 繼承方式 父類1, 繼承方式 父類2{}
子類不僅繼承父類的全部成員,還要定義新的數據成員和函數成員,新增的成員稱為子類成員(或稱為派生類成員)。

3、吸收和改造父類成員、添加新成員

在子類繼承父類的過程中,有下面個要點:

  • 子類繼承父類除去構造函數和析構函數外所有的成員;

  • 子類改造從父類繼承來的成員,包括訪問控制、覆蓋和隱藏;

  • 添加父類沒有的新成員;

下面定義的Animal類,作為Duck類的父類,具體定義如下:

class Animal {
public:
    Animal(int age_) { age = age_; printf("Init Animal \n"); }
    void eat() { printf("Animal eating! \n"); }
    void run() { printf("Duck Running! \n"); }
private:
    int age=0;
};

class Duck:public Animal {
public:
    /// 子類需要完成父類的初始化任務
    /// Duck類會調用Animal類的初始化函數
    Duck(int age_) :Animal(age_) { printf("init Duck! \n"); };
    void eat() { printf("Duck eating! \n"); }
};

上述代碼中,對應三個過程如下:

(1)吸收:Duck類繼承了Animal類除去構造和析構函數外的所有成員,所以Duck類對象可以使用Animal類的run()函數:

duck.run();

(2)改造:Duck類定義了和父類同名同返回類型同參數的eat()函數,屬于函數的覆蓋(如果返回類型和參數表不同屬于重載),直接使用函數名訪問的是Duck類的eat()函數,稱為同名隱藏:

duck.eat();

(3)添加:添加普通函數成員和數據成員的語法與一般類添加成員時相同,難點在于構造函數和析構函數,因為子類涉及到父類的構造函數和析構函數。

二、指針引用

1、指針和引用的異同

C++中,指針和引用并存,二者似乎有很多相同點,但是又不完全相同。有些情況下指針能做到的,引用也能做到,那么什么場合下適合使用指針,又是什么場合下適合使用引用呢?下面不是根據二者在性質上的差異進行分類,而是直接從使用的角度進行歸類。

首先分析二者的相同點:指針和引用在作為函數參數傳遞時,都不是傳遞的值,可以認為二者傳遞的都是地址,也就是說二者都能有效減少輸出傳遞過程的內存開銷。

其次是二者的不同點:引用必須在聲明的同時進行初始化,指向一個存在的對象。而指針并不要求必須進行初始化,同時指針還可以被定義為空指針,即不指向任何對象。另一點的顯著不同是,引用一旦指向某個對象就不能再去指向別的對象,而指針可以更換其指向的對象。

根據上述的相同點和不同點可以看出,引用更像是一個常量指針。因此,引用能實現的功能指針都能實現。C++并不是為了兼容C才使用引用這個概念,那么引用必然有它的優越之處。按照鄭莉老師書中所介紹的,“函數參數雙向傳遞和避免使用指針的算術運算”運算時,引用具有安全處理數據的效果,此時使用指針會增加代碼的復雜度。(個人認為:引用的作用依舊不是明顯,反而會造成不同程序員的代碼可讀性差,可能是自己還沒有真正掌握引用的強大之處)。

指針和引用還有很多需要進行討論的地方,根據二者的語法與定義都可以很自然的推理出來,比如new申請的內存首地址只能賦值給指針,等等。

2、指針的安全隱患

指針雖然強大,但是這種針對地址的操作對程序員的水平要求也比較高,因而存在著很多的安全隱患。比如,使用指針處理數組時和可能出現越界問題,如果沒有下標檢查就會造成難以預料的影響。

當然,指針的安全隱患問題還有很多,但是自己目前僅僅理解了一點,等以后理解的更加深入再進行記錄。

到此,相信大家對“C++類的繼承和派生及指針安全如何引用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

c++
AI

灌南县| 东兰县| 儋州市| 肥城市| 胶州市| 舟山市| 寿阳县| 合作市| 射阳县| 禄丰县| 大安市| 台中市| 清河县| 花垣县| 紫金县| 罗城| 塘沽区| 樟树市| 比如县| 阜平县| 宜兴市| 绥化市| 石狮市| 霍山县| 北宁市| 乐亭县| 澄江县| 遂平县| 滨海县| 曲周县| 汝城县| 闻喜县| 通海县| 临江市| 奉节县| 大连市| 色达县| 苏尼特左旗| 盐池县| 龙游县| 隆昌县|