C++結(jié)構(gòu)體初始化的10種寫法總結(jié)
1.前言
本篇目的:C++之結(jié)構(gòu)體初始化10種方式總結(jié)
2.C++中的結(jié)構(gòu)體(struct)和類(class)區(qū)別
C++中的結(jié)構(gòu)體(struct)和類(class)是兩種用于封裝數(shù)據(jù)和相關(guān)操作的復(fù)合數(shù)據(jù)類型。盡管它們在許多方面相似,但它們在C++中的使用和設(shè)計(jì)理念上存在一些關(guān)鍵差異。
首先,從語法角度看,結(jié)構(gòu)體和類的基本定義形式非常相似。它們都允許我們定義數(shù)據(jù)成員(即變量)和成員函數(shù)(即函數(shù)),以便我們可以對(duì)數(shù)據(jù)進(jìn)行操作。然而,在C++中,結(jié)構(gòu)體默認(rèn)是公有(public)的,這意味著其成員默認(rèn)是公開的,可以直接訪問。相反,類默認(rèn)是私有的(private),這意味著其成員默認(rèn)是隱藏的,需要通過公有成員函數(shù)進(jìn)行訪問。
這種默認(rèn)訪問權(quán)限的差異反映了結(jié)構(gòu)體和類在C++中的設(shè)計(jì)理念。結(jié)構(gòu)體通常被用于將一組數(shù)據(jù)聚合在一起,形成一個(gè)邏輯上的整體,這些數(shù)據(jù)成員通常是可以直接訪問的。而類則更強(qiáng)調(diào)封裝和隱藏內(nèi)部狀態(tài),通過公有成員函數(shù)提供對(duì)內(nèi)部數(shù)據(jù)的訪問和操作,從而保護(hù)數(shù)據(jù)的完整性和安全性。
此外,類還提供了更多的特性,如繼承、多態(tài)和模板等,這些特性使得類在構(gòu)建大型、復(fù)雜的軟件系統(tǒng)時(shí)更加靈活和強(qiáng)大。結(jié)構(gòu)體雖然也可以實(shí)現(xiàn)一些基本的封裝和抽象,但在這些高級(jí)特性上則顯得力不從心。
總的來說,結(jié)構(gòu)體和類在C++中都是用于封裝數(shù)據(jù)和操作的復(fù)合數(shù)據(jù)類型,但它們在默認(rèn)訪問權(quán)限、設(shè)計(jì)理念以及提供的特性上存在差異。選擇使用結(jié)構(gòu)體還是類,應(yīng)根據(jù)具體的應(yīng)用場景和需求來決定。對(duì)于簡單的數(shù)據(jù)聚合,可以使用結(jié)構(gòu)體;對(duì)于需要更復(fù)雜封裝和抽象的場景,則應(yīng)使用類。
3.代碼實(shí)例
直接初始化
struct MyStruct {
int x;
double y;
};
MyStruct s1 = {10, 3.14};
使用成員初始化列表
struct MyStruct {
int x;
double y;
};
MyStruct s2 = { .x = 10, .y = 3.14 };
默認(rèn)初始化并逐個(gè)賦值
struct MyStruct {
int x;
double y;
};
MyStruct s3;
s3.x = 10;
s3.y = 3.14;
使用構(gòu)造函數(shù)初始化
struct MyStruct {
int x;
double y;
MyStruct(int a, double b) : x(a), y(b) {}
};
MyStruct s4(10, 3.14);使用默認(rèn)構(gòu)造函數(shù)初始化
struct MyStruct {
int x;
double y;
};
???????MyStruct s5{};
s5.x = 10;
s5.y = 3.14;使用列表初始化
struct MyStruct {
int x;
double y;
};
???????MyStruct s6{};
s6 = {10, 3.14};
使用無名稱的臨時(shí)結(jié)構(gòu)體對(duì)象
struct MyStruct {
int x;
double y;
};
???????MyStruct s7 = MyStruct{10, 3.14};
使用emplace_back()
struct MyStruct {
int x;
double y;
};
???????std::vector<MyStruct> vec;
vec.emplace_back(10, 3.14);使用std::make_pair()
struct MyStruct {
int x;
double y;
};
???????std::pair<int, double> p = std::make_pair(10, 3.14);
MyStruct s8 = {p.first, p.second};使用memcpy()
struct MyStruct {
int x;
double y;
};
MyStruct s9;
int tempX = 10;
double tempY = 3.14;
std::memcpy(&s9, &MyStruct{tempX, tempY}, sizeof(MyStruct));使用無名稱的臨時(shí)結(jié)構(gòu)體對(duì)象實(shí)例代碼 V1.0
#include <iostream>
using namespace std;
struct BinderHandle1 {
int32_t handle;
};
class BpBinder1 {
public:
BpBinder1(BinderHandle1 handle) {
this->handle = handle;
}
private:
BinderHandle1 handle;
};
struct BinderHandle2 {
int32_t handle;
string data;
};
class BpBinder2 {
public:
BpBinder2(BinderHandle2 handle) {
this->handle = handle;
}
private:
BinderHandle2 handle;
};
int main() {
int handle = 100;
BpBinder1 *bp = new BpBinder1(BinderHandle1{handle});
delete bp;
BpBinder2 *bp2 = new BpBinder2(BinderHandle2{handle,"124"});
return 0;
}
使用無名稱的臨時(shí)結(jié)構(gòu)體對(duì)象實(shí)例代碼 V2.0
#include <iostream>
using namespace std;
struct BinderHandle2 {
int32_t handle;
string data;
};
class BpBinder2 {
public:
BpBinder2(BinderHandle2 handle) {
this->handle = handle;
printf("xxx--------------->%s(), line = %d, handle = %d\n",__FUNCTION__,__LINE__,this->handle.handle);
printf("xxx--------------->%s(), line = %d, data = %s\n",__FUNCTION__,__LINE__,this->handle.data.c_str());
}
private:
BinderHandle2 handle;
};
int main() {
int handle = 100;
BpBinder2 *bp2 = new BpBinder2(BinderHandle2{handle,"124"});
delete bp2;
return 0;
}
到此這篇關(guān)于C++結(jié)構(gòu)體初始化的10種寫法總結(jié)的文章就介紹到這了,更多相關(guān)C++結(jié)構(gòu)體初始化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)反轉(zhuǎn)鏈表的兩種方法
本文主要介紹了C++實(shí)現(xiàn)反轉(zhuǎn)鏈表的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Qt實(shí)現(xiàn)字幕無間隙滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)字幕無間隙滾動(dòng)效果,文中的實(shí)現(xiàn)過程講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-11-11
C++ 冒泡排序數(shù)據(jù)結(jié)構(gòu)、算法及改進(jìn)算法
冒泡排序是一種簡單排序。這種排序是采用“冒泡策略”將最大元素移到最右邊。在冒泡過程中,相鄰兩個(gè)元素比較,如果左邊大于右邊的,則進(jìn)行交換兩個(gè)元素。這樣一次冒泡后,可確保最大的在最右邊。然后執(zhí)行n次冒泡后排序即可完畢2013-04-04
c++實(shí)現(xiàn)簡單隨機(jī)數(shù)的代碼
在本篇文章里小編給大家整理的是一篇關(guān)于c++實(shí)現(xiàn)簡單隨機(jī)數(shù)的代碼內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2021-05-05

