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

詳解C++程序中定義struct結(jié)構(gòu)體的方法

 更新時(shí)間:2016年05月18日 17:24:48   作者:煙客旅人  
C++中同樣擁有C語(yǔ)言中的結(jié)構(gòu)體,下面就來(lái)詳解C++程序中定義struct結(jié)構(gòu)體的方法,需要的朋友可以參考下

什么是結(jié)構(gòu)體?
簡(jiǎn)單的來(lái)說(shuō),結(jié)構(gòu)體就是一個(gè)可以包含不同數(shù)據(jù)類型的一個(gè)結(jié)構(gòu),它是一種可以自己定義的數(shù)據(jù)類型,它的特點(diǎn)和數(shù)組主要有兩點(diǎn)不同,首先結(jié)構(gòu)體可以在一個(gè)結(jié)構(gòu)中聲明不同的數(shù)據(jù)類型,第二相同結(jié)構(gòu)的結(jié)構(gòu)體變量是可以相互賦值的,而數(shù)組是做不到的,因?yàn)閿?shù)組是單一數(shù)據(jù)類型的數(shù)據(jù)集合,它本身不是數(shù)據(jù)類型(而結(jié)構(gòu)體是),數(shù)組名稱是常量指針,所以不可以做為左值進(jìn)行運(yùn)算,所以數(shù)組之間就不能通過(guò)數(shù)組名稱相互復(fù)制了,即使數(shù)據(jù)類型和數(shù)組大小完全相同。

結(jié)構(gòu)體的定義

定義結(jié)構(gòu)體使用struct修飾符,例如:

struct test  
{  
  float a;  
  int b;  
};  

 
上面的代碼就定義了一個(gè)名為test的結(jié)構(gòu)體,它的數(shù)據(jù)類型就是test,它包含兩個(gè)成員a和b,成員a的數(shù)據(jù)類型為浮點(diǎn)型,成員b的數(shù)據(jù)類型為整型。

由于結(jié)構(gòu)體本身就是自定義的數(shù)據(jù)類型,定義結(jié)構(gòu)體變量的方法和定義普通變量的方法一樣。

test pn1;

這樣就定義了一test結(jié)構(gòu)體數(shù)據(jù)類型的結(jié)構(gòu)體變量pn1,結(jié)構(gòu)體成員的訪問(wèn)通過(guò)點(diǎn)操作符進(jìn)行,pn1.a=10 就對(duì)結(jié)構(gòu)體變量pn1的成員a進(jìn)行了賦值操作。
注意:結(jié)構(gòu)體生命的時(shí)候本身不占用任何內(nèi)存空間,只有當(dāng)你用你定義的結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量的時(shí)候計(jì)算機(jī)才會(huì)分配內(nèi)存。
結(jié)構(gòu)體,同樣是可以定義指針的,那么結(jié)構(gòu)體指針就叫做結(jié)構(gòu)指針。
結(jié)構(gòu)指針通過(guò)->符號(hào)來(lái)訪問(wèn)成員,下面我們就以上所說(shuō)的看一個(gè)完整的例子:

#include <iostream>   
#include <string>   
using namespace std;  
 
struct test//定義一個(gè)名為test的結(jié)構(gòu)體  
{ 
  int a;//定義結(jié)構(gòu)體成員a  
  int b;//定義結(jié)構(gòu)體成員b  
};  
 
void main()    
{  
  test pn1;//定義結(jié)構(gòu)體變量pn1  
  test pn2;//定義結(jié)構(gòu)體變量pn2  
  pn2.a=10;//通過(guò)成員操作符.給結(jié)構(gòu)體變量pn2中的成員a賦值  
  pn2.b=3;//通過(guò)成員操作符.給結(jié)構(gòu)體變量pn2中的成員b賦值  
  pn1=pn2;//把pn2中所有的成員值復(fù)制給具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量pn1  
  cout<<pn1.a<<"|"<<pn1.b<<endl;  
  cout<<pn2.a<<"|"<<pn2.b<<endl;  
  test *point;//定義結(jié)構(gòu)指針  
 
  point=&pn2;//指針指向結(jié)構(gòu)體變量pn2的內(nèi)存地址  
  cout<<pn2.a<<"|"<<pn2.b<<endl;  
  point->a=99;//通過(guò)結(jié)構(gòu)指針修改結(jié)構(gòu)體變量pn2成員a的值  
  cout<<pn2.a<<"|"<<pn2.b<<endl;  
  cout<<point->a<<"|"<<point->b<<endl;  
  cin.get();  
} 

 
總之,結(jié)構(gòu)體可以描述數(shù)組不能夠清晰描述的結(jié)構(gòu),它具有數(shù)組所不具備的一些功能特性。

再看一下下面這段結(jié)構(gòu)體的定義:

struct point {
  int x;
  int y;
};

這段代碼在C++里面其實(shí)簡(jiǎn)單,point是一個(gè)類(class), 且由于用了struct關(guān)鍵字,那么x,y都是public的。然而在C里面,事情沒(méi)這么簡(jiǎn)單。在C里面point只是一個(gè)tag, struct point才是一個(gè)完整的類型名稱, 所以在C里面,用聲明一個(gè)poin變量,需要這么寫(xiě):struct point pt; 而在C++可以直接寫(xiě):point pt;

在C里面想直接用類似C++的方法定義變量,需要用typedef, 比如

typedef struct point {
  int x;
  int y;
} Point;

那么就可以直接寫(xiě)Point pt; 了。之所以想寫(xiě)這個(gè)總結(jié)是因?yàn)樽约涸谟胹truct的時(shí)候總是用的不倫不類,比如下面的用法就是不好的我覺(jué)得:

struct Point {
  int x;
  int y;
};
Point pt;

這段代碼是定義pt是C++的用法, 涉及到類,但是定義這個(gè)類又只有兩個(gè)public的成員變量,像極了純C的struct結(jié)構(gòu)體。這就有點(diǎn)不倫不類了,如果要從面向?qū)ο蟮慕嵌?,最好就還是把Point定義成class, 然后加上getX, setX, getY, setY去access還有modify成員變量,還要加一個(gè)constructor和destructor:

class Point {
public:
  Point(int vx, int vy): x(vx), y(vy) {}
  ~Point() {}

  int getX() const { return x; } //const means 'this' is constant
  int getY() const { return y; }
  void setX(int value) { x = value; }
  void setY(int value) { y = value; }

private:
  int x;
  int y;
};
Point pt;

上面的代碼的風(fēng)格是很好的,而且也不會(huì)不倫不類,但是就是稍微有點(diǎn)小題大做或者殺雞用牛刀的感覺(jué),為什么這么說(shuō)呢,比如有時(shí)候我們其實(shí)很想方便的修改x, y,覺(jué)得直接賦值更加自然,何必調(diào)用一個(gè)函數(shù)呢,這個(gè)感覺(jué)來(lái)自于面向過(guò)程的C,如果這樣, 我覺(jué)得下面這個(gè)代碼也是可以接受的比較自然的一種代碼(還是面向?qū)ο蟮乃季S,但是僅僅省略getter和setter而直接access成員變量):

struct Point {
  int x;
  int y;
  Point(int vx, int vy): x(vx), y(vy) {}
};

總結(jié):

C和C++里面的struct還是需要好好理解,一個(gè)是面向過(guò)程,一個(gè)是面向?qū)ο?,使用的時(shí)候千萬(wàn)不要不倫不類。我覺(jué)得C++的面向?qū)ο蟮挠梅ū容^合理,C面向過(guò)程的用法還是太繁瑣不夠靈活,建議使用倒數(shù)第一和倒是第二種struct代碼風(fēng)格。

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)四窗口聊天

    C語(yǔ)言實(shí)現(xiàn)四窗口聊天

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)四窗口聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 純C語(yǔ)言:折半查找源碼分享

    純C語(yǔ)言:折半查找源碼分享

    這篇文章主要介紹了純C語(yǔ)言:折半查找源碼,有需要的朋友可以參考一下
    2014-01-01
  • C語(yǔ)言實(shí)現(xiàn)歌手大獎(jiǎng)賽計(jì)分程序

    C語(yǔ)言實(shí)現(xiàn)歌手大獎(jiǎng)賽計(jì)分程序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)歌手大獎(jiǎng)賽計(jì)分程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C++標(biāo)準(zhǔn)庫(kù)封裝的vector數(shù)組

    C++標(biāo)準(zhǔn)庫(kù)封裝的vector數(shù)組

    這篇文章主要介紹了C++標(biāo)準(zhǔn)庫(kù)封裝的vector數(shù)組,vector創(chuàng)建的對(duì)象包含眾多封裝好的函數(shù),想了解其相關(guān)資料的小伙伴可以參考下面文章內(nèi)容,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-03-03
  • Matlab實(shí)現(xiàn)灰色預(yù)測(cè)的示例代碼

    Matlab實(shí)現(xiàn)灰色預(yù)測(cè)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Matlab實(shí)現(xiàn)灰色預(yù)測(cè),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下
    2022-05-05
  • 深入解析C++編程中類的封裝特性

    深入解析C++編程中類的封裝特性

    這篇文章主要介紹了深入解析C++編程中類的封裝特性,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C語(yǔ)言實(shí)現(xiàn)三子棋游戲(初級(jí)版)

    C語(yǔ)言實(shí)現(xiàn)三子棋游戲(初級(jí)版)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲初級(jí)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 詳解C++?的STL迭代器原理和實(shí)現(xiàn)

    詳解C++?的STL迭代器原理和實(shí)現(xiàn)

    這篇文章主要為大家介紹了C++的STL迭代器原理和實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C/C++中g(shù)etline函數(shù)案例總結(jié)

    C/C++中g(shù)etline函數(shù)案例總結(jié)

    這篇文章主要介紹了C/C++中g(shù)etline函數(shù)案例總結(jié),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++中vector的實(shí)現(xiàn)方法示例詳解

    C++中vector的實(shí)現(xiàn)方法示例詳解

    這篇文章主要介紹了C++中vector實(shí)現(xiàn)的相關(guān)資料,vector是C++中重要的容器之一,底層通過(guò)三個(gè)迭代器實(shí)現(xiàn),分別是_start,?_finish,?和_end_of_storage,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10

最新評(píng)論

南华县| 盐山县| 鱼台县| 宿州市| 安义县| 龙海市| 仁寿县| 辽宁省| 新乡市| 宁陕县| 平定县| 湖口县| 惠来县| 手游| 汶上县| 江门市| 陵川县| 正蓝旗| 佳木斯市| 白河县| 克什克腾旗| 资兴市| 扶绥县| 西宁市| 浑源县| 古交市| 峨山| 伊吾县| 宜章县| 新建县| 抚松县| 塔河县| 阜康市| 皋兰县| 柘城县| 牡丹江市| 石嘴山市| 富顺县| 南开区| 古蔺县| 略阳县|