課程介紹
C++ 不僅能兼容 C 語言,并且還繼承了 C 語言的運行速度,因此在許多大型專案中都可以看到 C++ 的身影,封裝、繼承、多型、模板作為 C++ 的重要特性,掌握封裝、繼承、多型、模板對提高開發效率有著很明顯的提升,
本課程容納了很多知識點和實驗操作,學習本課程的關鍵因素在于動手去做,多做實驗并要做相關的記錄,這都將是以后開發中的寶貴經驗,
本課程共 21 個實驗章節,主要針對封裝、繼承、多型、模板這 4 個特性作為基礎進行講解實驗,并且圍繞這 4 個特性講解了很多與之相關的其他知識點,
課程難度
較難
適合人群
- 對 C 語言或者 C++ 有基礎知識的同學
- 想要在 C++ 繼續深入學習的同學
- 想進入 C++ 實戰的同學
只要課程有一點啟發,那就是一個重大的提升,本課程也許就是你突破瓶頸的機會,不論你是準備進軍 C++ 開發的準程式員還是混跡職場的 C++ 開發程式員,都可以深入學習!
第一章 認識類與物件
知識點
- 認識類與物件
- 行內函式
- string 類
- 類的定義與實體化
官方定義
類:在面向物件編程中是一種面向物件計算機編程語言的構造,是創建物件的藍圖,描述了所創建的物件共同的屬性和方法,
物件:通過類創建出物件,又稱實體化物件,
深入理解類
類是 C++ 的核心特性,在 C++ 的世界中,可以將所有事物都看作為一個物件,將物件進行封裝之后成為一個類,通常被稱為用戶定義型別,
例如:可以將貓、狗、鳥、桌子、學生、人、三角形、矩形等都封裝為一個類,只要在實際編程中用到的都可以抽象封裝為一個類,
C++ 相關概念
| 概念 | 描述 |
|---|---|
| 建構式 | 類的建構式是一種特殊的函式,在創建一個新的物件時自動呼叫 |
| 解構式 | 類的解構式也是一種特殊的函式,在洗掉所創建的物件時自動呼叫 |
| 拷貝建構式 | 拷貝建構式,是一種特殊的建構式,它在創建物件時,是使用同一類中之前創建的物件來初始化新創建的物件 |
| 友元函式 | 友元函式可以訪問類的 private 和 protected 成員 |
| 行內函式 | 通過行內函式,編譯器試圖在呼叫函式的地方擴展函式體中的代碼 |
| 類成員函式 | 類的成員函式是指那些把定義和原型寫在類定義內部的函式,就像類定義中的其他變數一樣 |
| 類訪問修飾符 | 類成員可以被定義為 public、private 或 protected,默認情況下是定義為 private |
| this 指標 | 每個物件都有一個特殊的指標 this,它指向物件本身 |
| 靜態成員 | 類的資料成員和成員函式都可以被宣告為靜態的 |
自定義類
假設最近在做一個學校管理系統的專案,首先想到可以將學生定義為一個類,然后發現可以在學生類的基礎上再抽象出一個人類的物件,如果需要用到學生的學科,可以進一步將學科也封裝為一個,還可以封裝檔案操作類,資料庫操作類等等,
類定義注意事項:
- 定義一個類時,需要使用關鍵字 class 來進行修飾,
- 一個簡單的類可以沒有建構式和解構式,但是系統自動生成一個默認的建構式和解構式,
- 在類中使用關鍵字 public 、 private 和 protected 來限制資料成員和成員函式,一般使用 public 和 private 來修飾資料成員和成員函式,
- 一般將資料成員封裝在 private 關鍵字下,不讓用戶直接訪問資料成員,而是通過成員函式來進行訪問,
- 在類的最后(大括號后)必須要有一個逗號,勿忘,
實體化物件
實體化物件有兩種方式,一種是在堆疊上實體化,另一種是在堆上實體化,
實體化物件注意事項:
- 在堆疊上實體化的物件,超出定義域物件資源會自動被系統回收,
- 在堆上實體化的物件,最后需要使用 delete 關鍵字來釋放記憶體,否則會造成記憶體泄漏,
- 使用堆疊實體化的物件使用 “.” 來訪問資料成員或成員函式,在堆上實體化的物件使用 “->” 來訪問資料成員或成員函式,
- 釋放完記憶體后將物件置空,防止野指標,
string 類
C++ 標準庫:前人開發時撰寫的類,并被收錄成為通用的標準類,之后的人開發時可以直接使用,避免重復造輪子,string 類是開發時經常會使用到的一個類,
string 類是 C++ 標準庫中的字串類,專用于字串操作,接下來介紹一下如何使用 string 類,
string 介紹
- string 類頭檔案
#include<string>, - string 類在 std 命名空間內,
- 使用 string 實體化一個字串型別的物件,
- 對字串物件執行例如拼接、查找等操作,
string 初始化方式
| 實體化 | 解釋 |
|---|---|
| string s1; | s1 為空字串 |
| string s2("ABC"); | s2 初始值為 "ABC" |
| string s3 = s2; string s3(s2); | s3 初始化為 s2 的一個副本 |
| string s4(n, 'c' ); | s4 初始化為字符 'c' 的 n 個副本 |
string 常用操作
以下列出了 string 經常使用的操作,如果還需要用到其他操作可以在 官網 查找 string 類的相關使用方法,里面配有示例程式,
| 操作 | 解釋 |
|---|---|
| s.empty() | 判斷 s 是否為空,如果 s 為慷訓傳 true,否則回傳 false |
| s.size() | 回傳 s 中字符的個數,和 s.length() 功能相同 |
| s[n] | 回傳 s 中位置 n 的字符,位置從0開始,切記不要越界 |
| s1 + s2 | 將 s1 和 s2 連接成新字串,回傳新字串 |
| s1 = s2 | 賦值,將 s2 內容賦值給 s1 |
| s1 == s2 | 判斷相等,相等回傳 true,否則回傳 false |
| s1 != s2 | 判斷不等,不等回傳 true,否則回傳 false |
| s.c_str() | 回傳 char*,和 s.data() 功能相同 |
| stoi() | 字串轉 int,還有 stol(),stoll() |
| stof() | 字串轉 float, 還有 stod(),stold() |
行內函式
官方定義:行內函式又是稱作 “在線函式” 或者 “編譯時期展開函式” 的一種編程語言結構,用來建議編譯器對一些特殊函式進行行內擴展;也就是說建議編譯器將制定的函式體插入并取代每一次呼叫該函式的地方,從而節省每次呼叫函式帶來的額外時間開支,
- 定義行內函式關鍵字:inline,
- 行內分為普通行內函式和類行內函式,
- 定義行內函式時一般使用于簡單的函式,如果函式比較復雜,編譯器也將自動取消行內,
編譯程序
![]()
類行內函式
如下圖是使用類內定義一個類的方法(“類的定義域實體化” 小節中會講到類內定義),而使用類內定義的成員函式編譯器會默認將成員函式當做為行內函式進行編譯,但如果成員函式比較復雜,編譯器也不會將成員函式當做行內函式進行編譯,
![]()
- 編譯器在編譯時會將行內函式直接插入到呼叫行內函式處,這樣可以減去呼叫函式時的開銷,
- 在實際開發程序中,可以酌情考慮使用類內定義的方法實作類成員函式,
類的定義與實體化
在學習本小節之前先來學習另外兩個知識點:
- 類內定義
- 類外定義
類內定義
類內定義即在類中實作成員函式,
在課程的示例代碼中,類中定義的成員函式都是使用的類內定義的方式實作的,在實際的開發中不建議這樣做,除非是定義一個非常簡單的類或者成員函式,
在行內函式小節中提到過,類內定義的方式編譯器會自動嘗試將成員函式作為行內函式進行編譯,如果成員函式比較復雜,編譯器將不會作為行內函式進行編譯,
在實際開發程序中需要考慮到程式的架構問題,類內定義適用于一個相對比較簡單的程式,考慮到開發時的方便性和時間成本,類外定義是實際程式開發中常用的方法,
類外定義
類外定義有兩種方式:
- 同檔案類外定義,
- 分檔案類外定義,
同檔案類外定義就是將類的成員函式定義在類之外的地方,同時類的成員函式使用類作用域來進行定義,在實際專案開發中,類不是很復雜時可以使用該方法,類比較復雜時不推薦使用,
分檔案定義類就是將類的定義放在 xxx.h 頭檔案中,而類的成員函式實作放在 xxx.cpp 檔案中,這種做法是做專案時推薦使用的方法,因為這樣將類的定義和成員函式分開后,在開發時很容易能夠查找到對應的定義和成員函式,
一般情況下檔案名和類名相同,便于開發時類管理,
第一章知識點總結
- 深入認識類與物件并講解 C++ 相關概念,
- 如何使用 string 類,
- 普通行內函式與類行內函式以及編譯器對行內函式的處理,
- 學習類內定義與類外定義,開發時常使用分檔案類外定義的方法,
- main 函式的回傳值為 int 型別,注意不要寫成 void 型別,
剩余章節內容,點擊《C++ 進階應用實戰》即可學習,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/9925.html
標籤:C++
上一篇:C++ 回傳const物件
