程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中的struct專題研究

C++中的struct專題研究

編輯:C++入門知識

  C++之父Bjarn Stroustrup對C++語言概括的第一條就是"a better C"。strUCt這個要害字就來源於C。而在C++中,struct的含義已經和C中的struct不盡相同了。在C++中,用戶定義類型,也就是class,擁有和內建類型一樣的地位。這可以從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來表示抽象的數據類型以及抽象接口,而與class所表示的類的概念相區別。
  
  struct在C中的使用方式轉移到C++以後仍然是非常重要,作為一組相關的數據而存在於一個struct,說明了他們在邏輯上是相互關聯的數據,同時他們被保存在struct裡而不是全局變量,也是對數據的一種治理。個人認為一種很樸素的用法要取代當前很熱門的get-set用法。比如
  
  
  
  class Foo {
  
   int bar;
  
  public:
  
   int get_bar() { return bar; }
  
   void set_bar(const int& b) { bar = b; }
  
  };
  這裡Foo::bar是一個需要頻繁存取的數據對象,它作為類Foo的私有成員存在,而通過公共接口存取。這是面向對象思想中數據封裝的體現。而考慮一下這個Foo::bar是否有必要成為私有成員?沒有,因為它就是一個數據,沒有必要用私有類成員的思想來封裝它,似乎可以看成是面向對象思想的過度濫用。等效的可以寫成:
  
  
  
  struct Foo {
  
   int bar;
  
  };
  
  然後通過普通的賦值操作來完成。這樣做似乎是回到了原始時代,但沒有必要用的就不要用,否則還會影響效率。 其次一個struct的應用就是來描述純虛類,也就是後來Java語言中類似接口的東西:
  
  
  
  struct Foo {
  
   virtual void Bar1() = 0;
  
   virtual void Bar2() = 0;
  
   // ...
  
  };
  
  使用struct可以些許節省編譯器的語法分析時間:),而且能在語義上表達的更為清楚。
  
  一般來講,當一個類中有必要進行數據隱藏時,請用class聲明,並將私有數據標記為private,公共接口標記為public;而當所有成員都有必要成為公有成員的時候,請用struct來聲明它。
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved