国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

C++中的struct專題研究

2019-11-17 05:39:12
字體:
供稿:網(wǎng)友

  C++之父Bjarn Stroustrup對C++語言概括的第一條就是"a better C"。strUCt這個要害字就來源于C。而在C++中,struct的含義已經(jīng)和C中的struct不盡相同了。在C++中,用戶定義類型,也就是class,擁有和內(nèi)建類型一樣的地位。這可以從C++中struct定義的類型在聲明變量時不必再寫出struct要害字看出。如

  

  struct Foo {

  // ...

  };

  

  Foo f;

  在C++程序中,人們似乎更熱衷于使用class,而幾乎忽略了struct的存在。實際上,struct就是成員默認為public的class(在class中,成員默認為PRivate)。事實上以下兩端代碼完全等價:

  代碼一:

  

  struct Foo {

  

  // ...

  

  };

  代碼二:

  

  class Foo {

  

  public:

  

  // ...

  

  };

  那么為什么要有struct的存在呢?首先的原因自然是保持對C的兼容。原先的C代碼可以不必修改就成為合法的C++代碼。第二個原因(個人愚見),是為了讓struct來表示抽象的數(shù)據(jù)類型以及抽象接口,而與class所表示的類的概念相區(qū)別。

  struct在C中的使用方式轉(zhuǎn)移到C++以后仍然是非常重要,作為一組相關(guān)的數(shù)據(jù)而存在于一個struct,說明了他們在邏輯上是相互關(guān)聯(lián)的數(shù)據(jù),同時他們被保存在struct里而不是全局變量,也是對數(shù)據(jù)的一種治理。個人認為一種很樸素的用法要取代當前很熱門的get-set用法。比如

  

  class Foo {

   int bar;

  public:

   int get_bar() { return bar; }

   void set_bar(const int& b) { bar = b; }

  };
  這里Foo::bar是一個需要頻繁存取的數(shù)據(jù)對象,它作為類Foo的私有成員存在,而通過公共接口存取。這是面向?qū)ο笏枷胫袛?shù)據(jù)封裝的體現(xiàn)。而考慮一下這個Foo::bar是否有必要成為私有成員?沒有,因為它就是一個數(shù)據(jù),沒有必要用私有類成員的思想來封裝它,似乎可以看成是面向?qū)ο笏枷氲倪^度濫用。等效的可以寫成:

  

  struct Foo {

   int bar;

  };

  然后通過普通的賦值操作來完成。這樣做似乎是回到了原始時代,但沒有必要用的就不要用,否則還會影響效率。 其次一個struct的應(yīng)用就是來描述純虛類,也就是后來java語言中類似接口的東西:

  

  struct Foo {

   virtual void Bar1() = 0;

   virtual void Bar2() = 0;

   // ...

  };

  使用struct可以些許節(jié)省編譯器的語法分析時間:),而且能在語義上表達的更為清楚。

  一般來講,當一個類中有必要進行數(shù)據(jù)隱藏時,請用class聲明,并將私有數(shù)據(jù)標記為private,公共接口標記為public;而當所有成員都有必要成為公有成員的時候,請用struct來聲明它。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿城市| 兴文县| 博客| 定结县| 永昌县| 河北省| 治多县| 广灵县| 聂拉木县| 昌平区| 准格尔旗| 十堰市| 韶山市| 巴青县| 延长县| 屯门区| 灵山县| 株洲市| 郎溪县| 阿坝| 随州市| 加查县| 灵武市| 大丰市| 海原县| 孝义市| 辽宁省| 盐津县| 察哈| 双辽市| 临朐县| 东辽县| 康定县| 蕲春县| 大余县| 伊宁市| 富源县| 禄丰县| 伽师县| 布拖县| 汉源县|