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
來存儲立方體的邊長。我們還定義了兩個公有成員函數getArea
和getVolume
來計算立方體的表面積和體積。此外,我們還提供了一個構造函數來初始化立方體的邊長,以及兩個可選的公有成員函數setSideLength
和getSideLength
來設置和獲取邊長。在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
中。
通過比較doRadius
和length
的大小關系,判斷點的位置:
若doRadius
等于length
,則點在圓上。
若doRadius
大于length
,則點在圓內。
若doRadius
小于length
,則點在圓外。
根據判斷結果,輸出相應的信息。
在main
函數中,首先創建了一個圓對象和一個點對象,并設置了圓的半徑和點的坐標。然后通過調用isSame
函數,判斷另一個點是否在圓上、內部或外部,并輸出相關信息。
3.總結
在C++中,類是面向對象編程(OOP)的核心概念之一。類是一種用戶定義的數據類型,它允許我們將數據(成員變量)和操作這些數據的方法(成員函數)組合在一起。下面是對C++中類的一些關鍵知識總結:
- 類的定義:
- 使用
class
關鍵字定義類。 - 類可以包含私有(
private
)、保護(protected
)和公有(public
)成員。 - 私有成員只能被類內部的成員函數訪問,而公有和保護成員可以在類外部被訪問(對于保護成員,派生類也可以訪問)。
- 使用
- 成員變量(也稱為屬性或字段):
- 成員變量是類的數據部分,用于存儲類的狀態。
- 它們可以在類的聲明中定義,也可以在類的實現文件(如果有的話)中定義。
- 成員函數(也稱為方法):
- 成員函數是類的方法部分,定義了可以對類的數據進行哪些操作。
- 它們可以是普通的函數,也可以是構造函數、析構函數、拷貝構造函數、移動構造函數、拷貝賦值運算符和移動賦值運算符等特殊成員函數。
- 訪問修飾符:
public
:類外部可以訪問的成員。private
:類外部無法訪問的成員,只能被類內部(包括成員函數和友元)訪問。protected
:與private
類似,但允許派生類訪問。
這些是C++中類的一些關鍵概念和特性。通過學習和使用這些特性,我們可以編寫更加靈活、可重用和易于維護的代碼。