初始化類對象

來源:互聯網
上載者:User
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>//////////////////// 一個典型的類——有三個資料成員...//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)/n", 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++甚至用預設的建構函式來初始化額外的元素,而不用外部的初始華常式。對我來說,這是一種進步,而不是不足。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.