C++核心編程學習4--類和對象--封裝

C++面向對象有三大特性:封裝、繼承和多態。

封裝

  • 將屬性和行為作為一個整體。
  • 將屬性和行為加以權限控制。

例子1:設計一個圓類

#include <iostream>
using namespace std;// 設計一個圓類,求圓的周長
// 圓周率:3.14
const double PI = 3.14;class Circle {
public:// 屬性int m_r;    //  半徑// 行為// 獲取圓的周長double calculateZC() {return 2*PI*m_r;}
};int main() {// 通過圓類創建一個具體的圓(對象)// c就是一個具體的圓(對象)      // 通過一個類創建一個圓對象的過程叫做實例化Circle c;      //創建對象 局部變量 放在棧上c.m_r = 10;     // 給圓對象的半徑賦值cout << c.calculateZC() << endl;return 0;
}

例子二 可以通過類的行為 對屬性賦值。

#include <iostream>
using namespace std;class Student {
public:// 屬性string s_name;int m_id;// 行為// 給姓名和學號進行賦值操作 可以通過類的行為 對屬性賦值。void setName(string name) {s_name = name;}void setId(int id) {m_id = id;}// 顯示姓名和學號void showInfo() {cout << s_name << " " << m_id << endl;}};int main() {Student s1{"張三", 001};s1.showInfo();Student  s2;s2.setName("homo");s2.setId(111);s2.showInfo();
}

封裝的訪問權限

  • public: 公有屬性,類外可以訪問
  • private: 私有屬性,類外不可以訪問
  • protected: 保護屬性,類外不可以訪問,類內可以訪問,子類可以訪問
#include <iostream>
using namespace std;class Person {// 姓名 公共權限public:string m_name;// 汽車 保護權限protected:string m_car;// 銀行密碼 私有權限private:int m_password;// 行為public:void func() {m_name = "張三";m_car = "保時捷";m_password = 123456;}void showInfo() {cout << "姓名:" << m_name << endl;cout << "汽車:" << m_car << endl;cout << "密碼:" << m_password << endl;}
};int main() {Person p1;p1.m_name = "homo";cout << p1.m_name << endl;// p1.m_car = "拖拉機"; 報錯,保護權限類外無法訪問// cout << p1.m_car << endl;// p1.m_password = 987654; 報錯,私有權限類外無法訪問// cout << p1.m_password << endl;Person p2;p2.func();cout << p2.m_name << endl;// cout << p2.m_car << endl; 同樣報錯,只能通過公開函數訪問// cout << p2.m_password << endl; 同樣報錯,只能通過公開函數訪問p2.showInfo();      // 正確,通過公開函數訪問
}

Struct和Class的區別

Struct默認為公有
Class默認為私有

成員屬性設置為私有

將所有成員屬性私有化,無論是想讓他可讀可寫還是只讀狀態。
可讀可寫的成員屬性可以在類內實現一個賦值的函數。該賦值函數放在公有權限中,實現類內訪問修改值。只讀的可以直接寫個返回函數,實現讀取。
set() get()

#include <iostream>
#include <string>using namespace std;class Person {// 公有方法對私有屬性進行控制
public:// 姓名:可讀可寫// 姓名的寫操作:設置姓名void setName(string name) {m_Name = name;}// 姓名的讀操作:獲取姓名string getName() {return m_Name;}// 年齡設置可讀可寫// 獲取年齡int getAge() {return m_Age;}// 年齡設置可讀可寫void setAge(int age) {if (age >= 0 && age <= 150)m_Age = age;else {cout << "年齡需要在0-150之間" << endl;return;   // 年齡輸入有誤,返回}}// 情人設置可寫void setLover(string lover) {m_lover = lover;}
private:string m_Name;  // 姓名 可讀可寫int m_Age = 18;  //  年齡 可讀可寫,但只能在0-150之間string m_lover; // 情人 只寫};int main() {Person p;// 寫姓名p.setName("aj");// 讀姓名cout << "姓名:" << p.getName() << endl;// 寫年齡p.setAge(20);// 讀年齡cout << "年齡:" << p.getAge() << endl;return 0;
}

立方體案例

//
// 設計立方體類(Cube),求出立方體的面積和體積。
// 分別用全局函數和成員函數判斷兩個立方體是否相等。
//
#include <iostream>
using namespace std;class Cube
{// 屬性
private:double m_L;     //長double m_W;     //寬double m_H;     //高// 行為
public:// 屬性為私有,設置方法獲取長寬高// 設置長void setL(double L) {m_L = L;}// 獲取長double getL() {return m_L;}// 設置寬void setW(double W) {m_W = W;}// 獲取寬double getW() {return m_W;}// 設置高void setH(double H) {m_H = H;}// 獲取高double getH() {return m_H;}// 求立方體的面積double getArea() {return 2*(m_L*m_W+m_L*m_H+m_W*m_H);}// 求立方體的體積double Volume() {return m_L*m_W*m_H;}// 成員函數判斷兩個立方體是否相等bool isEqualByClass(Cube & c) {if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH())return true;elsereturn false;}
};// 全局函數:判斷兩個立方體是否相等
// 思路:分別比較兩個立方體的長寬高是否相等,如果相等則認為兩個立方體相等
bool isEqual(Cube & c1, Cube & c2) {if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())return true;elsereturn false;
}int main()
{// 實例化兩個立方體Cube c1;c1.setL(10);c1.setW(20);c1.setH(30);cout << "c1的面積為:" << c1.getArea() << endl;cout << "c1的體積為:" << c1.Volume() << endl;cout << "--------------------" << endl;Cube c2;c2.setL(10);c2.setW(20);c2.setH(30);cout << "c2的面積為:" << c2.getArea() << endl;cout << "c2的體積為:" << c2.Volume() << endl;cout << "--------------------" << endl;// 全局函數判斷兩個立方體是否相等bool a = isEqual(c1, c2);if (a)cout << "兩個立方體相等" << endl;elsecout << "兩個立方體不相等" << endl;cout << endl;// 成員函數判斷兩個立方體是否相等bool b = c1.isEqualByClass(c2);if (b)cout << "成員函數判斷:兩個立方體相等" << endl;elsecout << "成員函數判斷:兩個立方體不相等" << endl;
}

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

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

相關文章

AC身份認證實驗之AAA服務器

一、實驗背景某公司需要在企業的公司網絡出口使用上網行為管理設備&#xff0c;以審計管理局域網的所有設備&#xff0c;同時&#xff0c;局域網內的所有設備都將上網行為代理上網&#xff0c;但是發生過訪客外傳一些非法信息&#xff0c;所以需要對外來人員進行實名認證&#…

數組算法之【數組中第K個最大元素】

目錄 LeetCode-215題 LeetCode-215題 給定整數數組nums和整數k&#xff0c;返回數組中第k個最大元素 public class Solution {/*** 這里是基于小頂堆這種數據結構來實現的*/public int findKthLargest(int[] nums, int k) {// 實例化一個小頂堆MinHeap minHeap new MinHeap…

高亮匹配關鍵詞樣式highLightMatchString、replaceHTMLChar

replaceHTMLChar: s > s.toString().replace(/</g, <).replace(/>/g, >),// 高亮匹配關鍵詞樣式----------------------------------------highLightMatchString(originStr, matchStr, customClass ) {matchStr && (matchStr matchStr.replace(/[.*?…

HUAWEI Pura80系列機型參數對比

類別HUAWEI Pura80 UltraHUAWEI Pura80 ProHUAWEI Pura80 ProHUAWEI Pura80建議零售價&#xffe5;9999起&#xffe5;7999起&#xffe5;6499起&#xffe5;4699起顏色鎏光金、鎏光黑釉紅、釉青、釉白、釉黑釉金、釉白、釉黑絲絨金、絲絨綠、絲絨白、絲絨黑外觀材質設計光芒耀…

使用 PyTorch 的 torchvision 庫加載 CIFAR-10 數據集

CIFAR-10是一個更接近普適物體的彩色圖像數據集。CIFAR-10 是由Hinton 的學生Alex Krizhevsky 和Ilya Sutskever 整理的一個用于識別普適物體的小型數據集。一共包含10 個類別的RGB 彩色圖片&#xff1a;飛機&#xff08; airplane &#xff09;、汽車&#xff08; automobile …

藍橋杯51單片機

這是我備考省賽的時候總結的錯誤點和創新點那個時候是用來提醒自己的&#xff0c;現在分享給你們看^_^一考點二注意點記得初始化&#xff39;&#xff14;&#xff0c;&#xff39;&#xff15;&#xff0c;&#xff39;&#xff16;&#xff0c;&#xff39;&#xff17;&…

【2025/07/23】GitHub 今日熱門項目

GitHub 今日熱門項目 &#x1f680; 每日精選優質開源項目 | 發現優質開源項目&#xff0c;跟上技術發展趨勢 &#x1f4cb; 報告概覽 &#x1f4ca; 統計項&#x1f4c8; 數值&#x1f4dd; 說明&#x1f4c5; 報告日期2025-07-23 (周三)GitHub Trending 每日快照&#x1f55…

【生成式AI導論 2024】第12講:淺談檢定大型語言模型能力的各種方式 學習記錄

跟標準答案做對比看是否正確 選擇題是不是正確 MMLU massive multitask Language Understanding MT-bench 使用語言模型來評分 還有其他任務的對比,也有特別刁鉆的問題 閱讀長文的能力 grep kamradt 大海撈針

嵌入式 Qt 開發:實現開機 Logo 和無操作自動鎖屏

在嵌入式設備開發中&#xff0c;為設備添加開機 Logo 和無操作自動鎖屏功能是提升用戶體驗的重要環節。本文將詳細介紹如何在 Qt 嵌入式項目中實現這兩個功能。我們將使用 Qt 5/6 和 Linux 環境&#xff0c;確保代碼的可移植性和通用性。項目結構為了實現這兩個功能&#xff0c…

【AI智能體】Dify 開發與集成MCP服務實戰操作詳解

目錄 一、前言 二、Dify 介紹 2.1 Dify是什么 2.2 MCP 介紹 2.2.1 什么是MCP 2.2.2 MCP核心特性 2.3 Dify中開發與使用MCP介紹 2.3.1 MCP Server開發與使用 2.4 dify 開發MCP Server優勢 三、Dify開發與集成MCP操作過程 3.1 Dify MCP 插件說明 3.2 安裝mcp-server插…

django filter按兩個屬性 去重

在Django中&#xff0c;如果你想基于兩個屬性去重&#xff0c;可以使用distinct()方法并結合annotate()和Count()來實現。這種方法通常用在查詢集中&#xff0c;尤其是在你需要統計基于某些字段的唯一值時。 示例 假設你有一個Person模型&#xff0c;它有兩個字段&#xff1a;f…

PHP高級進階:突破編程邊界,開啟技術新征程

目錄一、PHP 高級函數的深度剖析1.1 回調函數的高級應用1.2 遞歸函數的優化技巧二、面向對象編程的深化2.1 抽象類與接口的實際運用2.2 設計模式在 PHP 中的實現三、PHP 與數據庫交互的高級技術3.1 數據庫連接池的使用3.2 事務處理與數據一致性四、性能優化與調試4.1 代碼性能分…

cx_Freeze python 打包詳解

優點&#xff1a;有時比 PyInstaller 更好處理外部 .pyd做法&#xff1a;安裝 cx_Freezeshpip install cx_Freeze新建 setup.py&#xff1a;pythonfrom cx_Freeze import setup, Executablebuild_exe_options {"packages": ["apscheduler.triggers.interval&qu…

Java字符串不可變性:從安全哲學到性能藝術的完美平衡

目錄 引言 一、什么是String的不可變性&#xff1f; 二、解剖String的“防彈衣”&#xff1a;底層實現機制 1. final的三重防御體系 2. 方法實現的精妙設計 3. 構造函數的防御性編程 三、為什么String必須不可變&#xff1f;設計哲學的五大支柱 1. 字符串常量池&#x…

多服務器批量發布軟件

當需要同時發布程序到多個服務器的時候&#xff0c;常規是通過jekins了但是喜歡了手動檔&#xff0c;直接寫了個簡單批量發布軟件&#xff0c;程序編譯發布后&#xff0c;直接加載配置&#xff0c;選擇對應的服務器&#xff0c;直接電機發布即可&#xff0c;基本可以媲美jekins…

基于.Net Core開源的庫存訂單管理系統

今天給大家推薦一套開源的庫存訂單管理系統。 項目簡介 該項目是基于Asp.Net Core Mvc開發的庫存訂單管理系統&#xff0c;主要實現模塊有倉庫、產品、供應商、客戶、采購訂單、銷售訂單、發貨、收貨等等&#xff0c;該項目是單體架構&#xff0c;技術棧也不是最新的&#xf…

Django學習之旅--第13課:Django模型關系進階與查詢優化實戰

在Django開發中&#xff0c;模型關系設計與查詢性能直接決定了系統的擴展性和效率。當業務場景從簡單的數據存儲升級為復雜的關聯分析&#xff08;如訂單統計、用戶行為分析&#xff09;時&#xff0c;基礎的模型關系和查詢方式已無法滿足需求。本節課將深入講解模型關系的高級…

簡單理解現代Web應用架構:從簡單到企業級

在開發Web應用程序時&#xff0c;理解如何構建一個既安全又高效的系統至關重要。本文將通過介紹從簡單的三層架構到復雜的企業級架構的演變過程&#xff0c;幫助您更好地理解這些概念。1. 基礎架構&#xff1a;React Node.js MySQL前端&#xff08;React&#xff09;&#xf…

修改 Lucide-React 圖標樣式的方法

修改 Lucide-React 圖標樣式的方法 使用 lucide-react 時&#xff0c;你可以通過多種方式修改圖標的樣式。以下是幾種常用的方法&#xff1a; 1. 通過 className 屬性 import { Home } from lucide-react;function MyComponent() {return <Home className"text-blue-50…

神經架構搜索革命:從動態搜索到高性能LLM的蛻變之路

本文將揭示如何通過神經架構搜索技術&#xff08;NAS&#xff09;自動發現最優網絡結構&#xff0c;并將搜索結果轉化為新一代高性能大型語言模型的核心技術。我們的實驗證明&#xff0c;該方法在同等計算資源下可實現80%的性能飛躍&#xff01;第一部分&#xff1a;神經架構搜…