亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

詳解C++程序中定義struct結構體的方法

2020-05-23 14:04:08
字體:
來源:轉載
供稿:網友
C++中同樣擁有C語言中的結構體,下面就來詳解C++程序中定義struct結構體的方法,需要的朋友可以參考下
 

什么是結構體?
簡單的來說,結構體就是一個可以包含不同數據類型的一個結構,它是一種可以自己定義的數據類型,它的特點和數組主要有兩點不同,首先結構體可以在一個結構中聲明不同的數據類型,第二相同結構的結構體變量是可以相互賦值的,而數組是做不到的,因為數組是單一數據類型的數據集合,它本身不是數據類型(而結構體是),數組名稱是常量指針,所以不可以做為左值進行運算,所以數組之間就不能通過數組名稱相互復制了,即使數據類型和數組大小完全相同。

結構體的定義

定義結構體使用struct修飾符,例如:

struct test  {    float a;    int b;  };  

 
上面的代碼就定義了一個名為test的結構體,它的數據類型就是test,它包含兩個成員a和b,成員a的數據類型為浮點型,成員b的數據類型為整型。

由于結構體本身就是自定義的數據類型,定義結構體變量的方法和定義普通變量的方法一樣。 

test pn1;

這樣就定義了一test結構體數據類型的結構體變量pn1,結構體成員的訪問通過點操作符進行,pn1.a=10 就對結構體變量pn1的成員a進行了賦值操作。
注意:結構體生命的時候本身不占用任何內存空間,只有當你用你定義的結構體類型定義結構體變量的時候計算機才會分配內存。
結構體,同樣是可以定義指針的,那么結構體指針就叫做結構指針。
結構指針通過->符號來訪問成員,下面我們就以上所說的看一個完整的例子:

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

 
總之,結構體可以描述數組不能夠清晰描述的結構,它具有數組所不具備的一些功能特性。

再看一下下面這段結構體的定義:

struct point {  int x;  int y;};

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

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

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

那么就可以直接寫Point pt; 了。之所以想寫這個總結是因為自己在用struct的時候總是用的不倫不類,比如下面的用法就是不好的我覺得:

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

這段代碼是定義pt是C++的用法, 涉及到類,但是定義這個類又只有兩個public的成員變量,像極了純C的struct結構體。這就有點不倫不類了,如果要從面向對象的角度,最好就還是把Point定義成class, 然后加上getX, setX, getY, setY去access還有modify成員變量,還要加一個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;

上面的代碼的風格是很好的,而且也不會不倫不類,但是就是稍微有點小題大做或者殺雞用牛刀的感覺,為什么這么說呢,比如有時候我們其實很想方便的修改x, y,覺得直接賦值更加自然,何必調用一個函數呢,這個感覺來自于面向過程的C,如果這樣, 我覺得下面這個代碼也是可以接受的比較自然的一種代碼(還是面向對象的思維,但是僅僅省略getter和setter而直接access成員變量):

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

總結:

C和C++里面的struct還是需要好好理解,一個是面向過程,一個是面向對象,使用的時候千萬不要不倫不類。我覺得C++的面向對象的用法比較合理,C面向過程的用法還是太繁瑣不夠靈活,建議使用倒數第一和倒是第二種struct代碼風格。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人avxxxxx在线看| 国产精品丝袜视频| 国内精品久久久久影院 日本资源| 欧美最顶级丰满的aⅴ艳星| 欧美怡春院一区二区三区| 亚洲第一视频网| 欧美国产日韩一区| 在线播放国产一区中文字幕剧情欧美| 亚洲精品一区av在线播放| 国内免费久久久久久久久久久| 日韩精品在线视频观看| 国产成人久久久精品一区| 日韩中文字幕在线精品| 日韩av中文字幕在线播放| 日韩一区二区三区在线播放| 精品国产一区二区三区久久狼黑人| 亚洲老头同性xxxxx| 亚洲jizzjizz日本少妇| 91久久嫩草影院一区二区| 亚洲国产成人在线播放| 国产精品久久二区| 亚洲图中文字幕| 久久久噜噜噜久久中文字免| 91精品中文在线| 欧美日韩国产一区二区三区| 色视频www在线播放国产成人| 亚洲成色999久久网站| 国产日韩在线视频| 欧美日韩色婷婷| 国产精品极品美女在线观看免费| 亚洲欧美日韩精品久久| 狠狠躁夜夜躁人人爽天天天天97| 国产精品久久久久久久久久99| 韩国三级日本三级少妇99| 91精品免费久久久久久久久| 91po在线观看91精品国产性色| 久久的精品视频| 亚洲国产精品推荐| 欧美成人免费全部观看天天性色| 亚洲天堂男人的天堂| 国产99久久精品一区二区| 亚洲国产精品999| 欧美成人黑人xx视频免费观看| 亚洲国产欧美在线成人app| 日韩中文在线中文网在线观看| 久久人人爽人人爽人人片亚洲| 国产欧美日韩中文| 成人黄色片网站| 欧美日韩一区二区在线| 精品偷拍一区二区三区在线看| 亚洲老板91色精品久久| 中文字幕精品久久| 日本伊人精品一区二区三区介绍| 日韩专区在线播放| 久久高清视频免费| 亚洲一区二区自拍| 欧美成人午夜激情视频| 欧美国产日韩一区二区三区| 亚洲男人第一av网站| 57pao精品| 久久国产精品久久久久久久久久| 久久久久久久久久久亚洲| 精品视频中文字幕| 深夜福利日韩在线看| 欧美成人激情视频免费观看| 国产欧美日韩精品专区| 国产中文字幕91| 国产精品美女无圣光视频| 欧美在线视频导航| 亚洲性av网站| 国产这里只有精品| 国产免费观看久久黄| 色综合久久88色综合天天看泰| 久久久精品一区二区三区| 亚洲综合在线播放| 91久久久久久久久久久| 国产热re99久久6国产精品| 欧美成人在线网站| 久久综合久久88| 国产精品ⅴa在线观看h| 操91在线视频| 亚洲国产又黄又爽女人高潮的| 亚州欧美日韩中文视频| 久久精品99久久久久久久久| 色香阁99久久精品久久久| 亚洲国产精品va在线看黑人动漫| 日韩免费观看视频| 日韩国产精品亚洲а∨天堂免| 欧美精品生活片| 综合欧美国产视频二区| 亚洲综合视频1区| 91久久精品国产91久久性色| 成人深夜直播免费观看| 日韩欧美中文在线| 国产欧美日韩丝袜精品一区| 国产噜噜噜噜噜久久久久久久久| 精品网站999www| 国产欧美日韩精品丝袜高跟鞋| 日韩经典中文字幕| 精品久久久久久久久国产字幕| 亚洲色图综合久久| 欧美国产高跟鞋裸体秀xxxhd| 亚洲精品中文字幕av| 日本在线观看天堂男亚洲| 欧美老女人性视频| 久久在线观看视频| 久久香蕉国产线看观看av| 午夜免费久久久久| 亚洲精品国产精品自产a区红杏吧| 国产欧美日韩亚洲精品| 欧美xxxx做受欧美| 中国日韩欧美久久久久久久久| 亚洲а∨天堂久久精品9966| 日韩av综合网站| 精品久久久久久国产| 国产美女久久精品| 国产丝袜一区二区| 亚洲电影免费观看高清完整版| 97国产精品视频| 国产一区深夜福利| 成人精品久久一区二区三区| 国产不卡视频在线| 欧美成人午夜影院| 日韩精品极品在线观看播放免费视频| www.亚洲男人天堂| 亚洲一区二区三区成人在线视频精品| 亚洲电影第1页| 久久视频国产精品免费视频在线| 午夜精品免费视频| 成人午夜激情免费视频| 日韩免费不卡av| 久久视频中文字幕| 国产精品色视频| 成人免费视频97| 亚洲人成在线免费观看| 这里只有精品在线播放| 日韩欧美在线视频日韩欧美在线视频| 国产精品草莓在线免费观看| 日韩中文字幕不卡视频| 国产在线不卡精品| 精品国产美女在线| 97福利一区二区| 91精品国产免费久久久久久| 日韩在线观看电影| 欧美剧在线观看| 亚洲第一级黄色片| 久久久久在线观看| 91国内免费在线视频| 亚洲精品小视频| 国产日本欧美在线观看| 久久久91精品国产| 亚洲欧美国产va在线影院| 欧美亚州一区二区三区| 91精品国产综合久久久久久蜜臀| 最近的2019中文字幕免费一页| 日韩禁在线播放| 中文字幕精品一区二区精品| 亚洲成人网在线观看| 欧美黑人国产人伦爽爽爽| 亚洲日韩第一页| 国产成人精品综合久久久| 欧美福利视频网站| 欧美成人自拍视频| 亚洲激情成人网|