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++ 中的結構體。兩者都是使用者定義的資料型別;但是,它們之間的唯一區別是類的成員預設是私有的,而結構體的成員預設是公有的。
之後,我們還討論了在類中使用結構體時經常遇到的問題。