C++基礎01-類與對象

来源:https://www.cnblogs.com/microwang/archive/2022/04/18/16160580.html
-Advertisement-
Play Games

類與對象 | C++基礎 C++語言程式設計網課 C++中支持我們使用類來定義自己的數據類型。 類的基本思想:數據抽象(data abstraction) 與 封裝(encapsulation)。 數據抽象:依賴於 介面(interface) 和 實現(implementation) 分離的編程(及 ...


類與對象 | C++基礎

C++語言程式設計網課

C++中支持我們使用類來定義自己的數據類型。

類的基本思想:數據抽象(data abstraction) 與 封裝(encapsulation)。

  1. 數據抽象:依賴於 介面(interface) 和 實現(implementation) 分離的編程(及設計)技術。

    • 類的介面:用戶所能執行的操作。

    • 類的實現:類的數據成員、負責介面實現的函數體、定義類所需的各種私有函數。

  2. 封裝:使類的介面和實現分離。隱藏了類的實現細節(類的用戶只能使用介面而無法訪問實現部分)。

抽象

對同一類對象的共同屬性和行為進行概括,形成類

  • 先註意問題本質,其次是實現過程或細節
  • 數據抽象:描述某對象的屬性或狀態(對象相互區別的物理量)
  • 代碼抽象:描述某類對象的共有的行為特征或具有的功能
  • 抽象的實現:
//定義Clock類
class Clock//邊界
{
public://特定的訪問許可權
	void setTime(int newH, int newM, int newS);
	void showTime();//外部介面
private://特定的訪問許可權
	int hour, minute, second;
};//邊界

封裝

將抽象出的數據、代碼封裝在一起,形成類。

  • 目的:增強安全性和簡化編程,使用者不必瞭解具體的實現細節,而只需要通過外部介面,以特定的訪問許可權來使用類的成員
  • 實現封裝:類聲明中的{}

類和對象的關係

對象是現實中的對象在程式中的模擬
類是同一類對象的抽象,對象是類的某一特定實體
定義類的對象,才可以通過對象使用類中定義的功能

類定義的語法形式

class Clock//類名稱
{
public:
    //公有成員(外部介面)
private:
    //私有成員
protected:
    //保護型成員
}

類成員的訪問控制

公有類型成員

在關鍵字public後面聲明,它們是類與外部的介面,任何外部函數都可以訪問公有類型數據和函數

私有類型成員

在關鍵字private後面聲明,只允許本類中的函數訪問,而類外部的任何函數都不能訪問
如果緊跟在類名稱的後面聲明私有成員,則關鍵字private可以省略

保護類型成員

與private類似,其差別表現在繼承與派生時對派生類的影響不同

對象定義的語法形式

class Clock {...};
//類名 對象名
Clock myClock

使用類的成員

類中成員互相訪問

直接使用成員名訪問

類外訪問

使用"對象名.成員名"方式訪問public屬性的成員

實例

//類的定義
#include <iostream>

using namespace std;

class Clock {
public:
	void setTime(int newH = 0, int newM = 0, int newS = 0);
	void showTime();
private:
	int hour, minute, second;
};

//成員函數的實現
void Clock::setTime(int newH, int newM, int newS) {
	hour = newH;
	minute = newM;
	second = newS;
}
void Clock::showTime() {
	cout << hour << ":" << minute << ":" << second << endl;
}

//對象的使用
int main() {
	Clock myClock;
	myClock.setTime(8, 30, 30);
	myClock.showTime();
	return 0;
}

類內初始值

可以為數據成員提供一個類內初始值
在創建對象時,類內初始值用於初始化數據成員
沒有初始值的成員將被預設初始化

類的成員函數

在類中說明函數原型
可以在類外給出函數體實現,併在函數名前使用類名加以限定
也可以直接在類中給出函數體,形成內斂成員函數
允許聲明重載函數和帶預設參數值的函數

內聯成員函數

為了提高運行時效率,對於較簡單的函數可以聲明為內聯形式
內斂函數體中不要有複雜結構(如迴圈語句和switch語句)

在類中聲明內聯成員函數的方式:

  • 將函數體放在類的聲明中
  • 使用inline關鍵字

本文來自博客園,作者:LaStHia,轉載請註明原文鏈接:https://www.cnblogs.com/microwang/p/16160580.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 定義 是指在讀取一行數據時,記下它的版本號、最近修改的時間戳或校驗和。然後,你可以在修改記錄之前檢查版本有沒有發生變化。 適用場景 適用於讀多寫少的場景,樂觀鎖相信事務之間的數據競爭概率較小,因此儘可能地直接做下去,直到提交的時候才去鎖定。 實現方式 取出記錄時,獲取當前 version 執行更新時 ...
  • 怎麼會有人不喜歡花呢?今天我們也來鑒定一下網路熱門植物!最近春天很多花都開了,我正好趁著清明假期到戶外踏青並拍攝 了不少花卉的照片。 由於對很多花不是特別熟悉,所以我們需要藉助軟體來識別究竟是什麼花的種類。市面上的識花軟體有很多,比如花伴侶、形 色、百度等等,我測試後發現百度的識別效果最為優秀。於是 ...
  • BlockingQueue阻塞隊列 BlockingQueue的四組API /**BlockQueue的四組API * 1.拋出異常 * 2.有返回值,不拋出異常 * 3.阻塞等待 * 4.超時等待 */public class BlockQueueTest { public static void ...
  • 前言 大家之前用python編寫過飛機大戰的部分代碼,只能夠展示英雄飛機,背景,敵機和發射子彈,今天把背景音樂,擊毀敵機,爆 炸特效,得分等等相關功能一併加入進來,代碼有點長,三百多行,你們要的代碼來了哦? 編程思路 主要使用pygame庫,類的創建,函數的調用等等來實現,話不多說,上程式。 編程實 ...
  • 反射機制雖然說增加了代碼的複雜程度但是提高代碼的靈活性,在以後的框架的學習中,配置文件的修改大部分都是利用的反射機制。和利用反射機制去做Runtime類這下麵方法exec,進行命令執行,後面去學習一下 ...
  • 官方numpy1.16.3,scipy,onnx的whl包有問題,不要直接安裝,自己編譯。 1.1安裝Python3.7 sudo apt update #檢查可更新文件 sudo apt install software-properties-common #安裝可添加源的工具 sudo add- ...
  • fastposter v2.8.0 發佈 電商海報編輯器 fastposter海報生成器,電商海報編輯器,電商海報設計器,fast快速生成海報 海報製作 海報開發。二維碼海報,圖片海報,生成分享海報 ...
  • 1、簡介 在企業級開發中、我們經常會有編寫資料庫表結構文檔的時間付出,從業以來,待過幾家企業,關於資料庫表結構文檔狀態:要麼沒有、要麼有、但都是手寫、後期運維開發,需要手動進行維護到文檔中,很是繁瑣、如果忘記一次維護、就會給以後工作造成很多困擾、無形中製造了很多坑留給自己和後人,於是萌生了要自己寫一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...