2012-01-11 199 views
3

快速而愚蠢的問題。 如果我不允許使用全局變量,我該如何聲明數組的大小?如何在C++中聲明一個數組的固定大小

假設我有一個文件Album.h

class Album { 
private: 
    Song songs[MAX_SONGS]; 

    //... 

} 

我在哪裏把MAX_SONGS = 30const int MAX_SONGS = 30 被認爲是一個變量的權利? 請注意,整個程序的大小應該是已知的。

+2

'const int的MAX_SONGS = 30;'被認爲是成爲一個「常量」。你也可以使用'#define MAX_SONGS 30'預處理指令。 – Cyclonecode 2012-01-11 21:20:12

+1

是否有沒有使用容器的原因? – Tony 2012-01-11 21:20:37

+2

使用'std :: vector ',你不必定義最大尺寸。 – 2012-01-11 21:21:24

回答

7
class Album { 
private: 
    static const int MAX_SONGS = 100; 
    Song songs[MAX_SONGS]; 

    //... 
}; 

請注意,靜態常量變量的內聯初始化只允許那些類型爲整數的內聯初始化。還要注意,不管初始化如何,這仍然只是一個聲明而不是定義。你通常不需要定義,雖然在某些情況下你會這樣做。

至於可見性,您可以提供一個靜態獲取函數,它將返回MAX_SONGS。

public: 
static int GetMaxSongs() { return MAX_SONGS; } 
+0

根據OP的要求,MAX_SONGS必須是「public」。 – hmjd 2012-01-11 21:22:56

+0

@hmjd:是嗎? – 2012-01-11 21:23:18

+0

或者...指出它需要被應用程序使用。 – hmjd 2012-01-11 21:24:14

2

const int MAX_SONGS = 30被認爲是一個變量吧?

是,MAX_SONGS是一個變量,但它是一個恆定可變。它不能改變。

這並不是全球變量不可取,而是全球可變狀態是不可取的,如果可以避免的話。這裏沒有可變狀態:MAX_SONGS不能改變。

+0

常量變量?... – 2012-01-11 21:22:21

+2

@PaulManta:是的。事實上,這是什麼。 – 2012-01-11 21:22:33

+0

更重要的一點是'MAX_SONGS'是一個_constant表達式_。考慮一個替代的'extern const int MAX_SONGS;'在其他TU中有一個初始化器不會是一個_constant表達式_即使它是一個常量變量。 – 2012-01-11 21:22:47

0

您也可以使用#define預處理器命令。

在Album.h

#define MAX_SONGS 30 
在Album.cpp

#include "Album.h" 
class Album { 
private: 
    Song songs[MAX_SONGS]; 
//... 
} 
+0

#define是否在其他模塊中可見? – Pincopallino 2012-01-12 16:52:19

+1

爲此,他們必須包含Album.h。你也可以創建一個Contants.h文件並將其導入到Album.h以及任何需要的地方 – 2012-01-12 19:49:05

0

爲了避免static用法,使用enum

class Album { 
    private: 
     enum { MAX_SONGS = 30 }; 
     Song songs[MAX_SONGS]; 

     //... 
    } 
相關問題