C++ 中的類中的結構體

Namita Chaudhary 2023年10月12日
  1. C++ 中的類中的結構體
  2. C++ 中的結構體
  3. C++ 中的類
  4. 在 C++ 中的類中使用結構體
  5. まとめ
C++ 中的類中的結構體

每當我們需要儲存一組相似的資料型別時,我們都會使用陣列。但是,如果出現我們需要儲存一組不相似型別的資料的情況,那麼我們使用結構體和類資料型別。

本文將解釋結構體和類以及如何在類中使用結構體。

C++ 中的類中的結構體

結構體是一種使用者定義的資料型別,用於儲存非相似型別的資料。關鍵字 struct 宣告瞭它。

另一方面,類也是使用者定義的資料型別,用於儲存不相似型別的資料。關鍵字 class 表示它。

但是,它們之間的主要區別在於,類隱藏了其成員的實現細節,預設情況下將類的所有成員設為私有,而結構體不隱藏其成員的實現細節,預設情況下將其所有成員設為上市。

現在讓我們瞭解如何在 C++ 中單獨使用結構體和類。

C++ 中的結構體

我們在 C++ 中使用 struct 關鍵字宣告一個結構體,然後宣告其所有資料成員。讓我們看一個程式碼示例以更好地理解它。

#include <iostream>
using namespace std;
struct X {
  int a;
};
int main() {
  X x;
  x.a = 10;
  cout << x.a;
}

輸出:

10

在上面的程式碼示例中,我們宣告瞭一個結構體 X,在其中我們宣告瞭一個變數 a。現在,我們建立這個結構體的一個例項,然後嘗試在 main 方法中通過這個例項 x 訪問變數 a;該結構體可以輕鬆訪問它並更改其值,因為預設情況下,它的所有成員都是公共的。

C++ 中的類

我們在 C++ 中通過 class 關鍵字宣告一個類,然後宣告該類的資料成員。讓我們藉助程式碼瞭解 C++ 中類的用法。

#include <iostream>
using namespace std;
class X {
  int a;
};
int main() {
  X x;
  x.a = 10;
  cout << x.a;
}

輸出:

./ex.cpp: In function 'int main)':
./ex.cpp:23:9: error: 'int X::a' is private
     int a;
         ^
./ex.cpp:28:7: error: within this context
     x.a = 10;
       ^
./ex.cpp:23:9: error: 'int X::a' is private
     int a;
         ^
./ex.cpp:29:13: error: within this context
     cout<<x.a;
             ^

在上面的程式碼示例中,我們建立了一個類,然後將其中的資料成員宣告為變數 a。然而,我們不能在我們的主函式中訪問這個資料成員,因為一個類的成員預設是私有的。

因此,它無法訪問並引發錯誤。

在 C++ 中的類中使用結構體

我們已經看到了如何分別建立一個結構體和一個類。現在讓我們瞭解如何在 C++ 中的類中使用結構體。

我們將藉助程式碼示例來理解這個概念。

#include <iostream>
using namespace std;
class X {
 public:
  struct T {
    int a;
  };
};
int main() {
  X x;
  x.a = 10;
  cout << x.a;
}

輸出:

./ex.cpp: In function 'int main)':
./ex.cpp:15:7: error: 'class X' has no member named 'a'
     x.a = 10;
       ^
./ex.cpp:16:13: error: 'class X' has no member named 'a'
     cout<<x.a;
             ^

如你所見,當我們嘗試訪問 main 方法中的結構體變數 a 時,上面的程式碼會引發錯誤。這是因為我們只建立了一個類的例項,並通過類的例項呼叫我們的變數。

我們甚至沒有建立結構體的例項。因此,程式會丟擲一個無法確定變數 a 的錯誤。

現在,我們將討論如何克服這個錯誤。正如你在結構體和類示例中所見,你需要在訪問其成員之前建立結構體和類的例項。

當你在類中使用結構體時,同樣的概念也適用。讓我們藉助程式碼示例來理解這一點。

#include <iostream>
using namespace std;
class X {
 public:
  struct T {
    int a;
  };
  T t;
};
int main() {
  X x;
  x.t.a = 10;
  cout << x.t.a;
}

輸出:

10

因此,我們現在在類本身中建立了一個結構體例項,並在類和結構體例項的幫助下訪問結構體變數 a

まとめ

在本文中,我們看到了類的用法以及 C++ 中的結構體。兩者都是使用者定義的資料型別;但是,它們之間的唯一區別是類的成員預設是私有的,而結構體的成員預設是公有的。

之後,我們還討論了在類中使用結構體時經常遇到的問題。

相關文章 - C++ Struct