最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 中類(class)和結構體(struct)的區(qū)別

 更新時間:2025年04月21日 10:36:28   作者:極客晨風  
類和結構體經常被用來定義復雜的數(shù)據(jù)結構,但兩者之間既有區(qū)別又能很好地結合使用,本文主要介紹了C++ 中類(class)和結構體(struct)的區(qū)別,具有一定的參考價值,感興趣的可以了解一下

在 C++ 中,類(class)和結構體(struct)經常被用來定義復雜的數(shù)據(jù)結構,但兩者之間既有區(qū)別又能很好地結合使用。本文將深入講解它們的區(qū)別、關系,并通過豐富的代碼案例說明如何靈活運用它們。

在這里插入圖片描述

1. 類與結構體的核心區(qū)別

1.1 語法上的區(qū)別

  • 默認訪問權限:
    • 結構體(struct): 默認訪問權限是 public。
    • 類(class): 默認訪問權限是 private。
  • 這是兩者在語法上的唯一區(qū)別,但在功能上它們可以互相替代。

1.2 使用場景的區(qū)別

  • 結構體:更適合存儲簡單的數(shù)據(jù),沒有復雜行為邏輯。
  • 類:不僅可以存儲數(shù)據(jù),還可以定義操作行為,并支持面向對象特性,如封裝、繼承、多態(tài)等。

1.3 概念上的區(qū)別

  • 結構體: 偏向于“數(shù)據(jù)的集合”,是一種輕量級的數(shù)據(jù)封裝工具。
  • 類: 偏向于“數(shù)據(jù)與行為的結合體”,是面向對象編程(OOP)的核心。

2. 為什么要從結構體擴展到類?

在 C 中,結構體只能存儲數(shù)據(jù),無法定義與數(shù)據(jù)相關的操作。這種方式雖然簡單,但對于復雜的系統(tǒng),數(shù)據(jù)和操作的分離使得代碼難以維護。
C++ 引入了類(class),在繼承結構體優(yōu)點的基礎上,增加了以下功能:

  • 支持將“數(shù)據(jù)”和“操作”封裝在一起。
  • 提供訪問控制(public、private、protected)。
  • 支持繼承和多態(tài),實現(xiàn)代碼復用和擴展。

3. 類和結構體的關系

在 C++ 中,類和結構體可以看作是同源不同職:

  • 同源: 類和結構體在語法和功能上幾乎完全一致,都可以包含數(shù)據(jù)成員和成員函數(shù)。
  • 不同職: 結構體主要用于簡單數(shù)據(jù)封裝,類則更偏向于復雜邏輯實現(xiàn)。

如何搭配使用?

  • 結構體負責存儲數(shù)據(jù)。
  • 類負責封裝行為和操作邏輯。
  • 兩者結合可以實現(xiàn)高效的代碼組織方式。

4. 代碼案例:類與結構體的結合使用

4.1 一個簡單的案例:矩形面積計算

我們通過一個例子來說明如何將結構體和類結合使用。

#include <iostream>
using namespace std;

// 定義一個結構體,用來存儲矩形的寬和高
struct Dimensions {
    double width;
    double height;
};

// 定義一個類,用來操作矩形
class Rectangle {
private:
    Dimensions dims;  // 使用結構體存儲矩形的基本信息

public:
    // 構造函數(shù),初始化矩形
    Rectangle(double width, double height) {
        dims.width = width;
        dims.height = height;
    }

    // 設置矩形的寬度和高度
    void setDimensions(double width, double height) {
        dims.width = width;
        dims.height = height;
    }

    // 計算矩形的面積
    double calculateArea() const {
        return dims.width * dims.height;
    }

    // 顯示矩形的信息
    void display() const {
        cout << "Width: " << dims.width 
             << ", Height: " << dims.height 
             << ", Area: " << calculateArea() 
             << endl;
    }
};

int main() {
    // 創(chuàng)建一個矩形對象
    Rectangle rect(5.0, 10.0);

    // 顯示矩形信息
    rect.display();

    // 修改矩形的尺寸
    rect.setDimensions(8.0, 12.0);

    // 再次顯示矩形信息
    rect.display();

    return 0;
}

輸出結果:

Width: 5, Height: 10, Area: 50
Width: 8, Height: 12, Area: 96

分析:

  • 結構體 Dimensions: 負責存儲矩形的寬度和高度。
  • 類 Rectangle: 負責操作矩形,比如設置尺寸和計算面積。

4.2 擴展案例:支持圓形和矩形的面積計算

進一步擴展,假設我們需要支持矩形和圓形的面積計算,可以通過繼承和多態(tài)來實現(xiàn)。

#include <iostream>
#include <cmath>
using namespace std;

// 定義一個結構體,用來存儲形狀的基本屬性
struct ShapeDimensions {
    double width;   // 對于矩形表示寬度
    double height;  // 對于矩形表示高度
    double radius;  // 對于圓形表示半徑
};

// 定義一個基類,表示通用形狀
class Shape {
protected:
    ShapeDimensions dims;

public:
    virtual double calculateArea() const = 0;  // 純虛函數(shù),子類必須實現(xiàn)
    virtual void display() const = 0;          // 純虛函數(shù),用于顯示信息
};

// 定義矩形類,繼承 Shape
class Rectangle : public Shape {
public:
    Rectangle(double width, double height) {
        dims.width = width;
        dims.height = height;
    }

    double calculateArea() const override {
        return dims.width * dims.height;
    }

    void display() const override {
        cout << "Rectangle: Width = " << dims.width 
             << ", Height = " << dims.height 
             << ", Area = " << calculateArea() 
             << endl;
    }
};

// 定義圓形類,繼承 Shape
class Circle : public Shape {
public:
    Circle(double radius) {
        dims.radius = radius;
    }

    double calculateArea() const override {
        return M_PI * dims.radius * dims.radius;
    }

    void display() const override {
        cout << "Circle: Radius = " << dims.radius 
             << ", Area = " << calculateArea() 
             << endl;
    }
};

int main() {
    // 創(chuàng)建矩形和圓形對象
    Rectangle rect(5.0, 10.0);
    Circle circle(7.0);

    // 顯示它們的面積
    rect.display();
    circle.display();

    return 0;
}

輸出結果:

Rectangle: Width = 5, Height = 10, Area = 50
Circle: Radius = 7, Area = 153.938

分析:

  • 結構體 ShapeDimensions: 存儲矩形的寬高和圓形的半徑。
  • 基類 Shape: 定義通用接口(如 calculateArea 和 display)。
  • 派生類 Rectangle 和 Circle: 實現(xiàn)特定形狀的邏輯。

5. 類與結構體結合使用的總結

5.1 類和結構體的分工:

  • 結構體(struct):用于存儲數(shù)據(jù),結構簡單,效率高。適合作為類的內部成員,用于表示數(shù)據(jù)。
  • 類(class):用于封裝邏輯,提供操作和行為接口。適合作為更高級的抽象工具。

5.2 使用建議:

  • 如果只是需要存儲數(shù)據(jù)而沒有邏輯,用結構體。
  • 如果需要對數(shù)據(jù)進行操作或擴展功能,用類。
  • 在復雜系統(tǒng)中,結構體和類結合使用可以提高代碼的清晰度和可維護性。

5.3 結構體和類的關系:

它們可以看作是工具箱中的不同工具:

  • 結構體是“材料”,用于存放原始數(shù)據(jù)。
  • 類是“機器”,用于處理這些數(shù)據(jù)。

通過類與結構體的結合,我們可以在代碼中清晰地分離數(shù)據(jù)和邏輯,既保持程序的簡潔性,又能靈活擴展功能。

到此這篇關于C++ 中類(class)和結構體(struct)的區(qū)別的文章就介紹到這了,更多相關C++  類和結構體內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于QT編寫一個網絡調試助手

    基于QT編寫一個網絡調試助手

    這篇文章主要為大家詳細介紹了如何基于QT編寫一個簡單的網絡調試助手,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起休閑游戲
    2025-07-07
  • 如何在C語言的宏中使用類型關鍵字

    如何在C語言的宏中使用類型關鍵字

    如何在C語言的宏中使用類型關鍵字呢?以下是實現(xiàn)方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++初級線程管理

    C++初級線程管理

    這篇文章主要介紹了C++初級線程管理,C++11中提供了std::thread庫,本文將從線程的啟動、線程等待、線程分離、線程傳參、線程識別等幾個方面介紹初級線程管理的知識,需要的朋友可以參考一下
    2021-12-12
  • 使用C++實現(xiàn)Range序列生成器的示例代碼

    使用C++實現(xiàn)Range序列生成器的示例代碼

    在C++編程中,經常需要迭代一系列數(shù)字或其他可迭代對象,本文將使用C++來實現(xiàn)一個簡單的Range封裝,文中的示例代碼講解詳細,感興趣的可以了解下
    2023-11-11
  • C++?Queue隊列類模版實例詳解

    C++?Queue隊列類模版實例詳解

    這篇文章主要為大家詳細介紹C++?Queue隊列類模版實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Qt實現(xiàn)小功能之復雜抽屜效果詳解

    Qt實現(xiàn)小功能之復雜抽屜效果詳解

    在Qt自帶的控件中,也存在抽屜控件:QToolBar。但是,該控件有個缺點:一次只能展開一個抽屜信息,無法實現(xiàn)多個展開。所以本文將自定義實現(xiàn)復雜抽屜效果,需要的可以參考一下
    2022-10-10
  • 基于list循環(huán)刪除元素,迭代器失效的問題詳解

    基于list循環(huán)刪除元素,迭代器失效的問題詳解

    下面小編就為大家?guī)硪黄趌ist循環(huán)刪除元素,迭代器失效的問題詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • VScode+ESP32簡單環(huán)境搭建

    VScode+ESP32簡單環(huán)境搭建

    本文章向大家介紹ESP32-C3搭建環(huán)境教程,主要包括ESP32-C3搭建環(huán)境教程使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++學習之移動語義與智能指針詳解

    C++學習之移動語義與智能指針詳解

    智能指針和移動語義是迄今為止,最難理解的兩個概念,下面這篇文章主要給大家介紹了關于C++學習之移動語義與智能指針的相關資料,需要的朋友可以參考下
    2021-05-05
  • C語言實現(xiàn)循環(huán)隊列基本操作

    C語言實現(xiàn)循環(huán)隊列基本操作

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)循環(huán)隊列基本操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

玉林市| 洪江市| 海城市| 潞西市| 新密市| 同心县| 哈巴河县| 昔阳县| 曲沃县| 台中县| 广东省| 稻城县| 绥化市| 增城市| 永济市| 历史| 通许县| 柘荣县| 建始县| 济南市| 利辛县| 北票市| 永和县| 阳东县| 梅州市| 内黄县| 宣城市| 玉龙| 永宁县| 九寨沟县| 玉山县| 晋城| 孙吴县| 搜索| 通江县| 平顶山市| 文成县| 鄂托克旗| 深泽县| 阿拉尔市| 桂林市|