2013-10-18 52 views
0

我有一個對象SeatSelection。在此對象中,我聲明整數數組的一個數組如下C++中的隱式靜態變量?

int *rows[25]; 

我SeatSelection構造函數初始化變量的行如下:

SeatSelection::SeatSelection(int start, int range){ 
    this->range = range; 
    this->start = start; 

    for(int i = 0; i < range; i++){ 
    rows[i] = new int[10]; 

    for(int j = 0; j < 10; j++) 
    rows[i][j] = (j+1); 
    } 
} 

在理論上,我現在應該對整數數組的數組大小10對嗎?

在我的驅動程序類,

我聲明瞭兩個SeatSelection對象,都具有不同參數:

SeatSelection premium(1,5); 
SeatSelection regular(6, 15); 

premium應該有5行的10個席位= 50個席位。

regular應該有15行,每個10個座位= 150個座位。

通過一些調試,我發現這兩個不同的SeatSelection對象共享相同的rows指針/數組。我沒有聲明這個變量是靜態的。這是爲什麼發生?

+6

你認爲'std :: vector'嗎? –

+5

調試輸出和SSCCE或它沒有發生。 –

+0

這是爲了我們不允許使用'std :: vector'的任務。我們的陣列必須「手工完成」。 –

回答

1

要爲每個類實例獲取單獨的rows變量,僅使變量「不是static」是不夠的。

您必須讓它成爲類實例才能爲每個實例提供存儲。

其他非靜態變量的存儲時間由其範圍決定。非靜態名稱空間成員(包括全局名稱空間)變量對整個程序都有一個副本。一個非靜態局部變量每次調用該函數都有一個副本。

+0

+1:真是讓人失望。 :) –

+0

@John:同意。這個你的水晶球工作得很好。 –

0

看起來像int *行[25]不是SeatSelection類的一部分。您可以在本地/全局聲明row []數組,並且每個SeatSelection對象使用相同的空間。高級對象寫入行[]內存後,普通對象將覆蓋它。