程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++基礎:初始化類對象

C++基礎:初始化類對象

編輯:C++入門知識
問題:
         C++中如何初始化類中的表數據?在C語言中,我能像下面這樣初始化結構數組: 
  

  
  //
  strUCt MYSTRUCT {
      int x,y,z;
  };MYSTRUCT table[] = {
      { 1,2,3 },
      { 4,5,6 },
      ... // etc
  };
  //
  
   
  但是假如MYSTRUCT是個C++類,而不是結構,我編譯就會出錯。我覺得這是C++的一個不足。 解答:
  
      這個問題完全取決於你如何看待C++。C++的一個優點之一便是它強制你做正確的事情。例如,C++不喜歡創建對象時不調用構造函數。這只就是為什麼你不能用原始數據初始化類對象的原因,不管是部分數組還是其它數據。   構造函數的目的是保證每一個對象都被正確初始化,不管你是從程序棧,可用內存堆分配空間,還是作為靜態數組元素。讓原始數據旁路掉構造函數被忌諱的事情。也導致你不能用初始的數據來創建對象靜態數組——你必須調用構造函數!
  //
  class CFooble {
      int x,y,z;
  public:
      CFooble(int xx, int yy, int zz)
          : x(xx),y(yy),z(zz) { ... }
      CFooble(int i) { x=y=z=i; }
  };
  CFooble table[] = {
      CFooble(1,2,3),
      CFooble(4,5,6),
      CFooble(0),    // can use any constructor!
  };
  //
  
   
  下面的代碼是個可以編譯的完整例子。
  //
  // StaticClassArray — 說明如何初始化在C++對象的靜態C數組
  // 編譯方法如下:
  //
  //    cl fooble.cpp
  //
  #include <stdio.h>
  
  
  

   更多內容請看C/C++技術專題專題,或
  //////////////////
  // 一個典型的類——有三個數據成員...
  //
  class CFooble {
  protected:
     int x,y,z;public:
     // 兩個構造函數...
     CFooble(int i) { x=y=z=i; }
     CFooble(int xx, int yy, int zz) : x(xx),y(yy),z(zz) { }   // 一個輸出函數
     void print() {
        printf("CFooble at %p: (%d,%d,%d) ", this, x, y, z);
     }   // 這個函數檢查是否為空...
     int IsEmpty() {
        return x==0 && y==0 && z==0;
     }
  };#ifdef NEVER
  // 如下這樣將不能運行—不能“生硬”地進行C++類對象的初始化!
  CFooble table[] = {
     { 1,2,3 },
     { 4,5,6 },
     { 0,0,0 }
  };
  #endif// 以下是如何初始化一個類數組:
  CFooble table[] = {
     CFooble(1,2,3),
     CFooble(4,5,6),
     CFooble(0), // 甚至可以是用不同的構造器!
  };void main()
  {
     for (CFooble* pc=table; !pc->IsEmpty(); pc++) {
        pc->print();
     }
  }
  //
   
      在C++中,你能用用任何構造函數初始化數組元素,並且C++甚至用缺省的構造函數來初始化額外的元素,而不用外部的初始華例程。對我來說,這是一種進步,而不是不足。
  
  
  
  

   更多內容請看C/C++技術專題專題,
   或
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved