搭配使用 typedef 與類別類型
同時使用 typedef 指定名稱和類別類型是廣受支援的用法,因為 ANSI C 會在 typedef 宣告中宣告未命名結構。 例如,許多 C 程式設計人員採用下列作法:
// typedef_with_class_types1.cpp
// compile with: /c
typedef struct { // Declare an unnamed structure and give it the
// typedef name POINT.
unsigned x;
unsigned y;
} POINT;
這類宣告的優點是可以執行類似以下的宣告:
POINT ptOrigin;
而非:
struct point_t ptOrigin;
在 C++ 中,typedef 名稱和真實的類型 (以類別、struct、等位和 enum 關鍵字宣告) 之間的差異比較明顯。 雖然在 typedef 陳述式中宣告無名稱結構的 C 作法仍然可用,但優勢不如在 C 中。
// typedef_with_class_types2.cpp
// compile with: /c /W1
typedef struct {
int POINT();
unsigned x;
unsigned y;
} POINT;
上述範例使用未命名的類別 typedef 語法宣告名為 POINT 的類別。 POINT 是類別名稱;不過,以此方式產生的名稱會受到下列限制:
名稱 (同義字) 不可以出現在類別、struct 或等位前置詞之後。
不可在類別宣告中使用此名稱做為建構函式或解構函式名稱。
總而言之,此語法不提供任何繼承、建構或解構機制。