C++核心編程類的總結封裝案例

C++類的總結封裝案例

文章目錄

  • C++類的總結封裝案例
    • 1.立方體類的封裝
    • 2.點與圓的關系的封裝
    • 3.總結

1.立方體類的封裝

在C++中,我們可以定義一個立方體(Cube)類來封裝立方體的屬性和方法。立方體的屬性可能包括邊長(side length),而方法可能包括計算表面積(area)和體積(volume)。

#include <iostream>
using namespace std;class Cube {
private:int  sideLength; // 立方體的邊長public:// 計算表面積的方法int getArea() {return 6 * sideLength * sideLength; // 立方體有6個面,每個面的面積是邊長的平方}// 計算體積的方法int getVolume(){return sideLength * sideLength * sideLength; // 體積是邊長的三次方}// 設置邊長的方法(可選)void setSideLength(int length) {sideLength = length;}
};int main() {// 創建一個邊長為5的立方體對象Cube cube{};cube.setSideLength(5);// 輸出立方體的表面積和體積cout << "Area of the cube: " << cube.getArea() << endl;cout << "Volume of the cube: " << cube.getVolume() << endl;return 0;}

在上面的代碼中,我們定義了一個名為Cube的類,它有一個私有成員變量sideLength來存儲立方體的邊長。我們還定義了兩個公有成員函數getAreagetVolume來計算立方體的表面積和體積。此外,我們還提供了一個構造函數來初始化立方體的邊長,以及兩個可選的公有成員函數setSideLengthgetSideLength來設置和獲取邊長。在main函數中,我們創建了一個邊長為5的立方體對象,并輸出了它的表面積和體積。

2.點與圓的關系的封裝

在C++中,我們要封裝點與圓的關系,首先需要兩個類,一個點類和一個圓類。然而在實際開發中,把所有的類都放在一個文件中會導致文件的難以管理,以及可維護性的降低。這時就需要類的分文件編寫。

首先要封裝一個點類。我們通常在頭文件中聲明類,在源文件中編寫成員函數。

#include "point.h"/*** 設置點的X坐標* @param x 新的X坐標值*/
void point::setX(double x) {X = x;
}/*** 設置點的Y坐標* @param y 新的Y坐標值*/
void point::setY(double y) {Y = y;
}/*** 獲取點的X坐標* @return 當前的X坐標值*/
double point::getX(){return X;
}/*** 獲取點的Y坐標* @return 當前的Y坐標值*/
double point::getY(){return Y;
}

在頭文件聲明類。

#pragma once
#include "point.h"/*** @class point* 二維平面中的點類定義。* 該類用于表示二維平面中的一個點,包含點的X坐標和Y坐標。*/
class point {double X; /**< 點的X坐標 */double Y; /**< 點的Y坐標 */public:/*** 設置點的X坐標。* @param x 新的X坐標值。*/void setX(double x);/*** 設置點的Y坐標。* @param y 新的Y坐標值。*/void setY(double y);/*** 獲取點的X坐標。* @return 當前點的X坐標值。*/double getX();/*** 獲取點的Y坐標。* @return 當前點的Y坐標值。*/double getY();};

圓類的封裝。與點類分文件相同。

#include "circle.h"
#include "point.h"/*** 設置圓的半徑* @param r 圓的新半徑*/
void  circle::setRadius(double r){radius=r;
}/*** 獲取圓的半徑* @return 圓的半徑*/
int circle::getRadius() const{return radius;
}/*** 設置圓的中心點* @param p 新的中心點坐標*/
void circle::setCenter(point p){center=p;
}/*** 獲取圓的中心點* @return 圓的中心點坐標*/
point circle::getCenter() {return center;
}

圓類的頭文件。

#pragma once
#include "point.h"/*** @brief 表示一個圓的類* * 該類定義了一個圓,包括圓的半徑和圓心。提供了設置和獲取半徑以及設置和獲取圓心的方法。*/
class circle {
public:/*** @brief 設置圓的半徑* * @param r 圓的新半徑*/void setRadius(double r);/*** @brief 獲取圓的半徑* * @return 圓的半徑*/[[nodiscard]] int getRadius() const;/*** @brief 設置圓的圓心* * @param p 新的圓心坐標點*/void setCenter(point p);/*** @brief 獲取圓的圓心* * @return 圓的圓心坐標點*/point getCenter();private:double radius; /**< 圓的半徑 */point center;  /**< 圓的圓心 */
};

在主函數中對類進行調用。

#include "iostream"
using namespace std;
#include "circle.h"
#include "point.h"/*** 判斷一個點是否在給定圓上、內部或外部。* @param c 圓對象,包含圓的中心和半徑。* @param p 點對象,要判斷的點的坐標。*/
void isSame(circle& c, point& p)
{// 計算圓的半徑的平方int doRadius = c.getRadius() * c.getRadius();// 計算點到圓心的距離的平方double length;length = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX())+ ((c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()));// 判斷點的位置:在圓上、在圓內還是在圓外if (doRadius == length)cout << "在圓上" << endl;else if (doRadius > length)cout << "在圓內" << endl;elsecout << "在圓外" << endl;
}int main() {circle c{};point p{};// 設置圓的半徑c.setRadius(5);// 設置點的坐標p.setX(5);p.setY(0);// 設置圓的中心為給定的點c.setCenter(p);// 輸出圓的中心坐標和半徑cout << "圓心坐標為(" << c.getCenter().getX() << "," << c.getCenter().getY() << ")" << endl;cout << "半徑為" << c.getRadius() << endl;point p1{};// 設置另一個點的坐標p1.setX(5);p1.setY(10);// 判斷該點是否在圓上、內部或外部isSame(c, p1);return 0;
}

主函數用于判斷一個點是否在給定圓上、內部或外部。函數接受一個圓對象和一個點對象作為參數,通過計算點到圓心的距離與圓的半徑的平方進行比較,來確定點的位置關系。具體步驟如下:
計算圓的半徑的平方,存儲在變量doRadius中。
計算點到圓心的距離的平方,存儲在變量length中。
通過比較doRadiuslength的大小關系,判斷點的位置:
doRadius等于length,則點在圓上。
doRadius大于length,則點在圓內。
doRadius小于length,則點在圓外。
根據判斷結果,輸出相應的信息。
main函數中,首先創建了一個圓對象和一個點對象,并設置了圓的半徑和點的坐標。然后通過調用isSame函數,判斷另一個點是否在圓上、內部或外部,并輸出相關信息。

3.總結

在C++中,類是面向對象編程(OOP)的核心概念之一。類是一種用戶定義的數據類型,它允許我們將數據(成員變量)和操作這些數據的方法(成員函數)組合在一起。下面是對C++中類的一些關鍵知識總結:

  1. 類的定義
    • 使用class關鍵字定義類。
    • 類可以包含私有(private)、保護(protected)和公有(public)成員。
    • 私有成員只能被類內部的成員函數訪問,而公有和保護成員可以在類外部被訪問(對于保護成員,派生類也可以訪問)。
  2. 成員變量(也稱為屬性或字段):
    • 成員變量是類的數據部分,用于存儲類的狀態。
    • 它們可以在類的聲明中定義,也可以在類的實現文件(如果有的話)中定義。
  3. 成員函數(也稱為方法):
    • 成員函數是類的方法部分,定義了可以對類的數據進行哪些操作。
    • 它們可以是普通的函數,也可以是構造函數、析構函數、拷貝構造函數、移動構造函數、拷貝賦值運算符和移動賦值運算符等特殊成員函數。
  4. 訪問修飾符
    • public:類外部可以訪問的成員。
    • private:類外部無法訪問的成員,只能被類內部(包括成員函數和友元)訪問。
    • protected:與private類似,但允許派生類訪問。

這些是C++中類的一些關鍵概念和特性。通過學習和使用這些特性,我們可以編寫更加靈活、可重用和易于維護的代碼。

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

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

相關文章

【redis】set和zset常用命令

set 無序集合類型 sadd 和 smembers SADD&#xff1a;將一個或者多個元素添加到set中。注意,重復的元素無法添加到set中。 語法&#xff1a;SADD key member [member] 把集合中的元素,叫做member,就像hash類型中,叫做field類似. 返回值表示本次操作,添加成功了幾個元素. 時間復…

網絡原理——http/https ---http(1)

T04BF &#x1f44b;專欄: 算法|JAVA|MySQL|C語言 &#x1faf5; 今天你敲代碼了嗎 網絡原理 HTTP/HTTPS HTTP,全稱為"超文本傳輸協議" HTTP 誕?與1991年. ?前已經發展為最主流使?的?種應?層協議. 實際上,HTTP最新已經發展到 3.0 但是當前行業中主要使用的HT…

概念解析 | 為什么SAR中的天線間隔需要是四分之一波長?

注1:本文系“概念解析”系列之一,致力于簡潔清晰地解釋、辨析復雜而專業的概念。本次辨析的概念是:為什么SAR中的天線間隔需要是四分之一波長 概念解析 | 為什么SAR中的天線間隔需要是四分之一波長? 在這篇文章中,我們將深入探討**合成孔徑雷達(SAR)**系統中,為什么天…

明日周刊-第12期

以前小時候最期待六一兒童節了&#xff0c;父母總會給你滿足一個愿望&#xff0c;也許是一件禮物也許是一次陪伴。然而這個世界上其實還有很多兒童過不上兒童節&#xff0c;比如某些地區的小孩子&#xff0c;他們更擔心的是能不能見到明天的太陽。 文章目錄 一周熱點航天探索火…

LeetCode-77. 組合【回溯】

LeetCode-77. 組合【回溯】 題目描述&#xff1a;解題思路一&#xff1a;回溯背誦版解題思路三&#xff1a;0 題目描述&#xff1a; 給定兩個整數 n 和 k&#xff0c;返回范圍 [1, n] 中所有可能的 k 個數的組合。 你可以按 任何順序 返回答案。 示例 1&#xff1a; 輸入&a…

Python怎么使用 SQLAlchemy 和model 查詢數據呢?

SQLAlchemy是一個流行的Python SQL工具包和對象關系映射器&#xff08;ORM&#xff09;。 假設正在使用 SQLAlchemy 并有一個模型 MyModel&#xff0c;使用這個模型以及 query 方法來查詢數據庫。 這里有一個基本的例子&#xff0c;說明如何使用 SQLAlchemy 的 query 方法和 wi…

算法-對列表元素劃分成兩個和值最大且相等的子列表

現有私募基金發行一支特殊基金產品&#xff0c;該基金認購人數上限不超過 30 人&#xff0c; 募集總金額不超過 3000W&#xff0c;每個投資人認購金額不定。該基金只能將募集到的錢用于投資兩支股票&#xff0c;且要求兩支股票投資金額必須相同&#xff0c;且每位投資人的錢只能…

0X JavaSE-- 集合框架【Collection(List、Set、Queue)、Map】

每一個集合類底層采用的數據結構不同&#xff0c;例如ArrayList集合底層采用了數組&#xff0c;LinkedList集合底層采用了雙向鏈表&#xff0c;HashMap集合底層采用了哈希表&#xff0c;TreeMap集合底層采用了紅黑樹。**集合中存儲的是引用。**即。集合中存放的是對象的地址&am…

springboot報錯:Failed to start bean ‘documentationPluginsBootstrapper‘

項目場景&#xff1a; springboot項目啟動時報錯 問題描述 具體報錯信息&#xff1a; 可能原因分析&#xff1a; 1、SpringFox的版本與Spring Boot的版本不兼容。解決這個問題&#xff0c;你可能需要檢查你正在使用的SpringFox和Spring Boot的版本&#xff0c;確保它們是兼容…

一千題,No.0037(組個最小數)

給定數字 0-9 各若干個。你可以以任意順序排列這些數字&#xff0c;但必須全部使用。目標是使得最后得到的數盡可能小&#xff08;注意 0 不能做首位&#xff09;。例如&#xff1a;給定兩個 0&#xff0c;兩個 1&#xff0c;三個 5&#xff0c;一個 8&#xff0c;我們得到的最…

[AIGC] 使用Flink SQL統計用戶年齡和興趣愛好

Apache Flink是一個具有強大計算能力、高吞吐量、低延遲的分布式計算框架&#xff0c;它支持批計算和流計算。Flink SQL是Flink ecosystem的一部分&#xff0c;是一種對結構化數據進行批和流處理的聲明式語言。本文以一個簡單的實例講解如何使用Flink SQL來統計用戶年齡和興趣愛…

C# 面向對象編程(一)——類 第三篇

總目錄 C# 語法總目錄 系列鏈接 C# 面向對象編程(一) 類 第一篇 C# 面向對象編程(一) 類 第二篇 C# 面向對象編程(一) 類 第三篇 C# 面向對象編程 一 ——類 第三篇 簡介面向對象編程類 第三篇9. 重載運算符10. 分部方法** nameof方法 **** GetType 方法和 typeof方…

【Intro】Heterogeneous Graph Attention Network(HAN)

論文鏈接&#xff1a;https://arxiv.org/pdf/1903.07293 Abstract 異構性和豐富的語義信息給面向異構圖的圖形神經網絡設計帶來了巨大的挑戰。 -> 一種基于分層注意的異構圖神經網絡&#xff0c;包括節點級注意和語義級注意。具體來說&#xff0c;節點級關注旨在學習節點…

GPT4o還沒用上?落后一個月!

文章目錄 一.Share官方網站&#xff1a;以一半的價格享受官網服務1.1 網址1.2 一些介紹和教學實戰&#xff1a;1.3 主界面&#xff08;支持4o)&#xff1a;1.4 GPTS&#xff08;上千個工具箱任你選擇&#xff09;&#xff1a;1.5 快速的文件數據分析&#xff08;以數學建模為例…

一次“yarn Couldn‘t find package“問題的排查

本文記錄一次使用yarn install 時報錯 Couldn’t find package xxxx 問題的排查。 問題描述 問題來自于筆者對一個前端項目進行debug時的yarn install 報錯信息&#xff0c;在一個可以明確代碼沒有問題的項目中&#xff0c;因為切換環境&#xff0c;重新執行yarn install,發現…

qt qcomboBox實現自動檢索功能 通過輸入匹配字符進行篩選

本人做了一個自定義控件SeepedSearch 用于快速檢索匹配的字符的下拉框 方便查找目標 直接上源碼 1. SpeedSerach.h #pragma once #include class QComboBox; class QCompleter; class SpeedSearch : public QWidget { Q_OBJECT public: explicit SpeedSearch(QWidget *paren…

web前端三大主流框架指的是什么

web前端三大主流框架是什么&#xff1f;前端開發師的崗位職責有哪些&#xff1f;這邊整理了相關內容供大家參考了解&#xff0c;請各位小伙伴隨小編一起查閱下面的內容。 web前端三大主流框架 web前端三大主流框架是Angular、React、Vue。 1.Angular Angular原名angularJS誕生…

如何用python做一個貪吃蛇程序?——潯川AI社(VIP)

1 游戲說明: 死亡條件:碰壁、吃自己! 狀態:只有吃了食物才會隨機生成其中一種狀態,分別是:穩如老狗、幸運光滑、衰神附體之一 狀態:穩如老狗:相對于上一次速度不變! 狀態:幸運光滑:相對于上一次速度變慢! 狀態:衰神附體:相對于上一次速度變快! 總體速率對比…

UnityAPI學習之Transform組件基本使用

目錄 Transform組件 訪問與獲取 Transform的位置和旋轉信息 Transform局部坐標和旋轉信息的獲取 Transform的縮放與正方向 縮放&#xff08;Scale&#xff09; 正方向 Transform相關的查找方法 銷毀游戲物體 Transform組件 訪問與獲取 現在創建一個容器放置GrisGO物…

操作系統的分類

Linux類系統的組成 Linux操作系統Linux內核Linux應用 Linux內核是什么&#xff1f; Linux系統內核是構成Linux操作系統核心的部分&#xff0c;它是操作系統中最基礎和關鍵的組件&#xff0c;直接與硬件交互并管理計算機系統的底層資源。以下是Linux內核主要特性和功能的概覽…