共用方式為


類別設計工具中的 Visual C++ 類別

[類別設計工具] 支援 C++ 類別 (Class),並用與 Visual Basic 和 Visual C# 類別圖案相同的方式,視覺化原生 (Native) C++ 類別,而且 C++ 類別還能擁有多重的繼承關係。 您可以展開類別圖案以顯示類別中的其他欄位和方法,或是予以摺疊以節省空間。

注意事項注意事項

[類別設計工具] 不支援等位 (一種特殊的類別,其中配置的記憶體僅為等位之最大資料成員所需要的數量)。

簡單繼承

當您將一個以上的類別拖曳到類別圖表中,而且這些類別具有類別繼承關係時,便會有箭號連接這些類別。 箭號會指向基底類別 (Base Class)。 例如,當下列類別在類別圖表中顯示時,箭號便會連接它們,並會從 B 指向 A。

class A {};
class B : A {};

您也可以只將類別 B 拖曳至類別圖表,以滑鼠右鍵按一下 B 的類別圖案,然後按一下 [顯示基底類別]。 這樣便會顯示其基底類別:A。

多重繼承

[類別設計工具] 支援多重類別繼承關係的視覺化。 「多重繼承」會在衍生的類別具有一個以上基底類別的屬性 (Attribute) 時使用。 下列是多重繼承的範例:

class Bird {};
class Swimmer {};
class Penguin : public Bird, public Swimmer {};

當您將一個以上的類別拖曳到類別圖表中,而且這些類別具有多重類別繼承關係時,便會有箭號連接這些類別。 箭號會指向基底類別。

以滑鼠右鍵按一下某個類別圖案,然後按一下 [顯示基底類別],便會顯示選取類別的基底類別。

注意事項注意事項

[顯示衍生類別] 命令並沒有對 C++ 程式碼提供支援。您可以移至 [類別檢視],展開型別節點,展開 [衍生型別] 子資料夾,然後將這些型別都拖曳到類別圖表上。

如需多重類別繼承的詳細資訊,請參閱多重繼承多個基底類別

抽象類別

[類別設計工具] 支援抽象類別 (也稱為「抽象基底類別」)。 這些是您絕對不會具現化的類別,但可以從中衍生其他類別。 使用本文件之前提及的「多重繼承」範例,就可以將 Bird 類別具現化為個別物件,如下所示:

int main()
{
   Bird sparrow;
   Bird crow;
   Bird eagle;
}

不過,您可能不想將 Swimmer 類別具現化為個別物件。 而是只要從中衍生動物類別的其他型別,例如 Penguin、Whale 和 Fish。 在該情況下,您可以將 Swimmer 類別宣告為抽象基底類別。

若要將類別宣告為抽象,可以使用 abstract 關鍵字。 成員如果標記為抽象 (或包含在抽象類別內) 都是虛擬的,而且必須由衍生自此抽象類別的類別實作這些成員。

class Swimmer abstract
{
   virtual void swim();
   void dive();
};

您也可以加入至少一個純虛擬函式 (Pure Virtual Function),將類別宣告為抽象:

class Swimmer
{
   virtual void swim() = 0;
   void dive();
};

在 [類別圖表] 中顯示這些宣告時,類別名稱 Swimmer 和其純虛擬函式 swim 都會以斜體顯示在抽象類別圖案中,並附帶有 [抽象類別] 這個標記法。 請注意,抽象類別和一般類別的型別圖案都相同,不過抽象類別型別圖案的框線為虛線。

衍生自抽象基底類別的類別必須覆寫基底類別中的每個純虛擬函式,否則便無法具現化衍生類別。 例如,從 Swimmer 類別衍生 Fish 類別,則 Fish 必須覆寫 swim 方法:

class Fish : public Swimmer
{
   void swim(int speed);
};

int main()
{
   Fish guppy;
}

在 [類別圖表] 中顯示此程式碼時,[類別設計工具] 會在 Fish 到 Swimmer 之間繪製一條繼承關聯線。

匿名類別

[類別設計工具] 支援匿名類別 (Anonymous Class)。 「匿名類別型別」(Anonymous Class Type) 就是不用識別項宣告的類別。 這種類別不能具有建構函式 (Constructor) 或解構函式 (Destructor),而且不能做為傳回值而從函式傳回。 您可以使用匿名類別來取代具有 typedef 名稱的類別名稱,如下列範例所示:

typedef struct
{
    unsigned x;
    unsigned y;
} POINT;

結構也可以是匿名的。 [類別設計工具] 會以顯示各自型別的相同方式,來顯示匿名類別和結構。 儘管您可以宣告及顯示匿名類別和結構,[類別設計工具] 卻不會使用您所指定的標記 (Tag) 名稱。 而是會使用 [類別檢視] 所產生的名稱。 類別或結構會在 [類別檢視] 和 [類別設計工具] 中顯示為稱為 [__unnamed] 的項目。

如需匿名類別的詳細資訊,請參閱匿名類別類型

樣板類別

[類別設計工具] 支援樣板類別 (Template Class) 的視覺化。 並且支援巢狀宣告。 下表顯示部分典型的宣告:

程式碼項目

類別設計工具檢視

template <class T>

class A {};

A<T>

樣板類別

template <class T, class U>

class A {};

A<T, U>

樣板類別

template <class T, int i>

class A {};

A<T, i>

樣板類別

template <class T, template <class K> class U>

class A {};

A<T, U>

樣板類別

下表顯示部分特製化的一些範例。

程式碼項目

類別設計工具檢視

template<class T, class U>

class A {};

A<T, U>

樣板類別

template<class T>

class A<T, T> {};

A<T, T>

樣板類別

template <class T>

class A<T, int> {};

A<T, int>

樣板類別

template <class T1, class T2>

class A<T1*, T2*> {};

A<T1*, T2*>

樣板類別

下表顯示部分特製化中繼承的一些範例。

程式碼項目

類別設計工具檢視

template <class T, class U>

class A {};

template <class TC>

class A<T, int> {};

class B : A<int, float>

{};

class C : A<int, int>

{};

A<T, U>

樣板類別

B

類別

(指向類別 A)

C

類別

(指向類別 A)

下表顯示部分特製化樣板函式的一些範例。

程式碼項目

類別設計工具檢視

class A

{

template <class T, class U>

void func(T a, U b);

template <class T>

void func(T a, int b);

};

A

func<T, U> (+ 1 overload)

template <class T1>

class A {

template <class T2>

class B {};

};

template<> template<>

class A<type>::B<type> {};

A<T1>

樣板類別

B<T2>

樣板類別

(B 包含在 [巢狀型別] 下的類別 A 內)

template <class T>

class C {};

class A : C<int> {};

A

類別

-> C<int>

C<T>

樣板類別

下表顯示樣板繼承的一些範例。

程式碼項目

類別設計工具檢視

template <class T>

class C {};

template<>

class C<int> {

class B {};

}

class A : C<int>::B {};

A

類別

->B

C<int>

類別

(B 包含在 [巢狀型別] 下的類別 C 內)

C<T>

樣板類別

下表顯示正式特製化類別連接的一些範例。

程式碼項目

類別設計工具檢視

template <class T>

class C {};

template<>

class C<int> {};

class A : C<int> {};

class D : C<float> {};

A

類別

->C<int>

C<int>

類別

C<T>

樣板類別

D

類別

->C<float>

class B {

template <class T>

T min (const T &a, const T &b);

};

B

min <T>

請參閱

參考

類別、結構和等位

匿名類別類型

多重繼承

多個基底類別

概念

使用 Visual C++ 程式碼 (類別設計工具)

其他資源

樣板