欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++結(jié)構(gòu)體初始化的10種寫法總結(jié)

 更新時(shí)間:2024年04月03日 10:20:19   作者:Android系統(tǒng)攻城獅  
這篇文章主要為大家詳細(xì)介紹了10種C++中結(jié)構(gòu)體初始化的寫法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

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è)谠S多方面相似,但它們?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ù)類型,但它們?cè)谀J(rèn)訪問權(quán)限、設(shè)計(jì)理念以及提供的特性上存在差異。選擇使用結(jié)構(gòu)體還是類,應(yīng)根據(jù)具體的應(yīng)用場(chǎng)景和需求來決定。對(duì)于簡(jiǎn)單的數(shù)據(jù)聚合,可以使用結(jié)構(gòu)體;對(duì)于需要更復(fù)雜封裝和抽象的場(chǎng)景,則應(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++全面精通類與對(duì)象

    C++全面精通類與對(duì)象

    類和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域
    2022-05-05
  • C++設(shè)計(jì)模式之迭代器模式(Iterator)

    C++設(shè)計(jì)模式之迭代器模式(Iterator)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之迭代器模式Iterator,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C++中TinyXML讀取xml文件用法詳解

    C++中TinyXML讀取xml文件用法詳解

    本文主要介紹了C++中TinyXML讀取xml文件用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C語言文件操作詳情(二)

    C語言文件操作詳情(二)

    這篇文章主要介紹了C語言文件操作詳情,文章基于上一篇文章的內(nèi)容繼續(xù)展開C語言文件操作的相關(guān)詳情,需要的小伙伴可以參考一下
    2022-04-04
  • 你知道C語言中#和##表示的意義嗎

    你知道C語言中#和##表示的意義嗎

    如標(biāo)題,這篇文章會(huì)講解C語言中的#和##是啥意思。我相信,大部分朋友應(yīng)該都沒怎么用過,這兩個(gè)玩意的使用條件也相當(dāng)苛刻,快跟隨小編一起來看看吧
    2023-04-04
  • C++實(shí)現(xiàn)LeetCode(159.最多有兩個(gè)不同字符的最長(zhǎng)子串)

    C++實(shí)現(xiàn)LeetCode(159.最多有兩個(gè)不同字符的最長(zhǎng)子串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(159.最多有兩個(gè)不同字符的最長(zhǎng)子串),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • c++ TCHAR轉(zhuǎn)string導(dǎo)致中文缺失或亂碼問題及解決

    c++ TCHAR轉(zhuǎn)string導(dǎo)致中文缺失或亂碼問題及解決

    這篇文章主要介紹了c++ TCHAR轉(zhuǎn)string導(dǎo)致中文缺失或亂碼問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼

    C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼

    智能指針用于資源管理,為了保證資源的操作得到順利的執(zhí)行防止資源泄露,因此大多數(shù)實(shí)現(xiàn)都以noexcept在參數(shù)列表后聲明為不拋出異常,這篇文章主要介紹了C++簡(jiǎn)單實(shí)現(xiàn)shared_ptr的代碼,需要的朋友可以參考下
    2022-09-09
  • C語言文件讀寫操作介紹與簡(jiǎn)單示例

    C語言文件讀寫操作介紹與簡(jiǎn)單示例

    這篇文章主要給大家介紹了關(guān)于C語言文件讀寫操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 在VC中隱藏控制臺(tái)程序窗口的實(shí)現(xiàn)代碼

    在VC中隱藏控制臺(tái)程序窗口的實(shí)現(xiàn)代碼

    大家都知道,當(dāng)編寫一個(gè)win32 console application時(shí),當(dāng)運(yùn)行此類程序的時(shí)候默認(rèn)情況下會(huì)有一個(gè)類似dos窗口的console窗口,但是有的時(shí)候我們只想在程序中運(yùn)行一段功能代碼,不希望顯示這個(gè)console窗口,讓代碼執(zhí)行完畢之后程序自動(dòng)退出
    2013-04-04

最新評(píng)論