在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++基礎語法中的引用、封裝和多態

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程 ? 2021-09-12 09:58 ? 次閱讀

本期是C++基礎語法分享的第六節,今天給大家來分享一下:

(1)引用;

(2)宏;

(3)成員初始化列表;

(4)封裝;

(5)繼承;

(6)多態;

引用

左值引用

常規引用,一般表示對象的身份。

右值引用

右值引用就是必須綁定到右值(一個臨時對象、將要銷毀的對象)的引用,一般表示對象的值。

右值引用可實現轉移語義(Move Sementics)和精確傳遞(Perfect Forwarding),它的主要目的有兩個方面:

消除兩個對象交互時不必要的對象拷貝,節省運算存儲資源,提高效率。

能夠更簡潔明確地定義泛型函數。

引用折疊

X& &、X& &&、X&& & 可折疊成 X&

X&& && 可折疊成 X&&

宏定義可以實現類似于函數的功能,但是它終歸不是函數,而宏定義中括弧中的“參數”也不是真的參數,在宏展開的時候對 “參數” 進行的是一對一的替換。

成員初始化列表

好處

更高效:少了一次調用默認構造函數的過程。

有些場合必須要用初始化列表:

常量成員,因為常量只能初始化不能賦值,所以必須放在初始化列表里面

引用類型,引用必須在定義的時候初始化,并且不能重新賦值,所以也要寫在初始化列表里面

沒有默認構造函數的類類型,因為使用初始化列表可以不必調用默認構造函數來初始化

initializer_list 列表初始化

用花括號初始化器列表初始化一個對象,其中對應構造函數接受一個 std::initializer_list 參數。

initializer_list 使用

#include 《iostream》#include 《vector》#include 《initializer_list》 template 《class T》struct S { std::vector《T》 v; S(std::initializer_list《T》 l) : v(l) { std::cout 《《 “constructed with a ” 《《 l.size() 《《 “-element list

”; } void append(std::initializer_list《T》 l) { v.insert(v.end(), l.begin(), l.end()); } std::pair《const T*, std::size_t》 c_arr() const { return {&v[0], v.size()}; // 在 return 語句中復制列表初始化 // 這不使用 std::initializer_list }}; template 《typename T》void templated_fn(T) {} int main(){ S《int》 s = {1, 2, 3, 4, 5}; // 復制初始化 s.append({6, 7, 8}); // 函數調用中的列表初始化 std::cout 《《 “The vector size is now ” 《《 s.c_arr().second 《《 “ ints:

”; for (auto n : s.v) std::cout 《《 n 《《 ‘ ’; std::cout 《《 ‘

’; std::cout 《《 “Range-for over brace-init-list:

”; for (int x : {-1, -2, -3}) // auto 的規則令此帶范圍 for 工作 std::cout 《《 x 《《 ‘ ’; std::cout 《《 ‘

’; auto al = {10, 11, 12}; // auto 的特殊規則 std::cout 《《 “The list bound to auto has size() = ” 《《 al.size() 《《 ‘

’; // templated_fn({1, 2, 3}); // 編譯錯誤!“ {1, 2, 3} ”不是表達式, // 它無類型,故 T 無法推導 templated_fn《std::initializer_list《int》》({1, 2, 3}); // OK templated_fn《std::vector《int》》({1, 2, 3}); // 也 OK}

面向對象

面向對象程序設計(Object-oriented programming,OOP)是種具有對象概念的程序編程典范,同時也是一種程序開發的抽象方針。

面向對象三大特征 —— 封裝、繼承、多態

封裝

把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。關鍵字:public, protected, private。不寫默認為 private。

public 成員:可以被任意實體訪問

protected 成員:只允許被子類及本類的成員函數訪問

private 成員:只允許被本類的成員函數、友元類或友元函數訪問

繼承

基類(父類)——》 派生類(子類)

多態

多態,即多種狀態(形態)。簡單來說,我們可以將多態定義為消息以多種形式顯示的能力。

多態是以封裝和繼承為基礎的。

C++ 多態分類及實現:

重載多態(Ad-hoc Polymorphism,編譯期):函數重載、運算符重載

子類型多態(Subtype Polymorphism,運行期):虛函數

參數多態性(Parametric Polymorphism,編譯期):類模板、函數模板

強制多態(Coercion Polymorphism,編譯期/運行期):基本類型轉換、自定義類型轉換

靜態多態(編譯期/早綁定)

函數重載

class A{public: void do(int a); void do(int a, int b);};

動態多態(運行期期/晚綁定)

虛函數:用 virtual 修飾成員函數,使其成為虛函數

動態綁定:當使用基類的引用或指針調用一個虛函數時將發生動態綁定

注意:

可以將派生類的對象賦值給基類的指針或引用,反之不可

普通函數(非類成員函數)不能是虛函數

靜態函數(static)不能是虛函數

構造函數不能是虛函數(因為在調用構造函數時,虛表指針并沒有在對象的內存空間中,必須要構造函數調用完成后才會形成虛表指針)

內聯函數不能是表現多態性時的虛函數

動態多態使用

class Shape // 形狀類{public: virtual double calcArea(){ 。.. } virtual ~Shape();};class Circle : public Shape // 圓形類{public: virtual double calcArea(); 。..};class Rect : public Shape // 矩形類{public: virtual double calcArea(); 。..};int main(){ Shape * shape1 = new Circle(4.0); Shape * shape2 = new Rect(5.0, 6.0); shape1-》calcArea(); // 調用圓形類里面的方法 shape2-》calcArea(); // 調用矩形類里面的方法 delete shape1; shape1 = nullptr; delete shape2; shape2 = nullptr; return 0;}

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 封裝
    +關注

    關注

    127

    文章

    7996

    瀏覽量

    143408
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73857

原文標題:C++基礎語法梳理:引用、封裝、繼承和多態

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Spire.XLS for C++組件說明

    Spire.XLS for C++ 是一款專業的 C++ Excel 組件,可以用在各種 C++ 框架和應用程序。Spire.XLS for C+
    的頭像 發表于 01-14 09:40 ?145次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    EE-112:模擬C++的類實現

    電子發燒友網站提供《EE-112:模擬C++的類實現.pdf》資料免費下載
    發表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的類實現

    AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    )開發框架。它極大地簡化了JS與C/C++之間的跨語言訪問,為開發者提供了一種邊界性編程體驗友好的解決方案。通過AKI,開發者可以使用讓代碼更易讀的語法糖,實現JS與C/
    發表于 01-02 17:08

    C語言和C++結構體的區別

    同樣是結構體,看看在C語言和C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?356次閱讀

    C7000優化C/C++編譯器

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    使用OpenVINO GenAI API在C++構建AI應用程序

    許多桌面應用程序是使用 C++ 開發的,而將生成式AI(GenAI)功能集成到這些應用程序可能會很具有挑戰性,尤其是因為使用像 Hugging Face 這樣的 Python 庫的復雜性。C++
    的頭像 發表于 10-12 09:36 ?467次閱讀
    使用OpenVINO GenAI API在<b class='flag-5'>C++</b><b class='flag-5'>中</b>構建AI應用程序

    ostream在c++的用法

    ostream 是 C++ 標準庫中一個非常重要的類,它位于 頭文件(實際上,更常見的是通過包含 頭文件來間接包含 ,因為 包含了 和 )。 ostream 類及其派生類(如 std::cout
    的頭像 發表于 09-20 15:11 ?942次閱讀

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優化與整理,已經是非常貼近開發的使用習慣與推理方式。與OpenCV的Mat對象對接方式更是幾乎無縫對接,非常的方便好用。
    的頭像 發表于 07-26 09:20 ?1057次閱讀

    ModusToolbox 3.2在c代碼包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個用純 C 語言編寫的 XMC4700 項目。 我正在嘗試添加一些 C++ 函數,并將其合并到我的原始代碼。 我可以構建獨立的 .cpp/.hpp
    發表于 07-23 08:21

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?7次下載

    C++實現類似instanceof的方法

    C++多態與繼承,但是很多人開始學習C++,有時候會面臨一個常見問題,就是如何向下轉型,特別是不知道具體類型的時候,這個時候就希望C++ 可以向Java或者Python中有insta
    的頭像 發表于 07-18 10:16 ?673次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>實現類似instanceof的方法

    要用指針怎么引用,一般在file2.c引用file1.c的字符串數組是怎么操作的?

    file1.c引用uart1_senddata(RTC_SET,sizeof(RTC_SET));正常 但在file2.c (包含file1.h),此時
    發表于 05-09 08:05

    C/C++兩種宏實現方式

    #ifndef的方式受C/C++語言標準支持。它不僅可以保證同一個文件不會被包含多次,也能保證內容完全相同的兩個文件(或者代碼片段)不會被不小心同時包含。
    的頭像 發表于 04-19 11:50 ?701次閱讀

    鴻蒙OS開發實例:【Native C++

    使用DevEco Studio創建一個Native C++應用。應用采用Native C++模板,實現使用NAPI調用C標準庫的功能。使用C標準庫hypot接口計算兩個給定數平方和的平
    的頭像 發表于 04-14 11:43 ?2765次閱讀
    鴻蒙OS開發實例:【Native <b class='flag-5'>C++</b>】

    使用 MISRA C++:2023? 避免基于范圍的 for 循環中的錯誤

    在前兩篇博客,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客,我們將仔細研究以 C++
    的頭像 發表于 03-28 13:53 ?861次閱讀
    使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環中的錯誤
    主站蜘蛛池模板: 亚洲欧美人成网站综合在线 | 亚洲精品久久久久久婷婷 | 亚洲一区二区三区中文字幕 | 久久影视精品 | 国产在线欧美精品卡通动漫 | 国产女主播精品大秀系列在线 | a级黄视频| 97爱sese| 欧美zooz人与禽交 | 手机看片日韩永久福利盒子 | 1024在线观看你懂的 | 亚洲jjzzjjzz在线观看 | 国产一级做a爱免费视频 | 天天摸天天爽天天澡视频 | 久热中文字幕在线精品免费 | www.天天色 | www.欧美成| 欧美一区二区三区免费高 | 亚洲视频在线观看一区 | 日本黄页网站在线观看 | 永久免费看黄 | 欧美黄色大片免费观看 | 天天操综合网 | 色妞网站 | 午夜影院免费体验 | 五月婷婷色丁香 | 四虎一区二区三区精品 | 欧美怡红院免费全部视频 | 午夜神马福利 | 网红和老师啪啪对白清晰 | 欧美性第一页 | 黄色在线观看视频网站 | 日韩艹| 特黄特色大片免费视频大全 | 色多多视频在线 | 亚洲你xx我xx网站 | 亚洲怡红院在线 | 国产综合视频在线观看 | 欧美色综合高清免费 | 亚洲精品久久久久午夜福 | 免费永久视频 |