Klasy Visual C++ w Projektancie klas
Projektant klasy obsługuje klasy C++ i visualizes macierzystych klas C++ w taki sam sposób jak kształty klas języka Visual Basic i Visual C#, z wyjątkiem klas C++ może mieć wiele relacji dziedziczenia.Można rozwinąć kształt klasy, aby pokazać więcej pól i metod w klasie lub zwinąć ją, aby zaoszczędzić miejsce.
[!UWAGA]
Projektant klasa nie obsługuje związków (specjalny typ klasy, w którym przydzielona pamięć jest niezbędne dla największych członek danych w Unii Europejskiej kwotę).
Proste dziedziczenie
Przeciągnij więcej niż jednej klasy na diagramie klasy i klasy mają relacji dziedziczenia klas, Strzałka łączy je.Strzałka wskazuje kierunek klasy podstawowej.Na przykład po wyświetleniu następujących klas na diagramie klasy strzałką łączy je, wskazując b A:
class A {};
class B : A {};
Można także przeciągnąć tylko klasy B Schemat klasy, kliknij prawym przyciskiem myszy kształt klasy B, a następnie kliknij Pokaż klasy Base.Spowoduje to wyświetlenie jej klasa podstawowa: A.
Wielokrotne dziedziczenie
Projektant klasy obsługuje wizualizacji relacje dziedziczenia wielu klasy.Wielokrotne dziedziczenie jest używana, gdy pochodne klasa ma atrybuty więcej niż jednej klasy podstawowej.Oto przykład dziedziczenie wielokrotne:
class Bird {};
class Swimmer {};
class Penguin : public Bird, public Swimmer {};
Przeciągnij więcej niż jednej klasy na diagramie klasy i relacją dziedziczenie klas wiele klas, Strzałka łączy je.Strzałka wskazuje kierunek klas podstawowych.
Prawym przyciskiem myszy kształt klasy, a następnie klikając polecenie Pokaż podstawowych klas wyświetlane klas podstawowych dla wybranej klasy.
[!UWAGA]
Pokaż otrzymane klas polecenie nie jest obsługiwane dla kodu C++.Można wyświetlić klas pochodnych, przechodząc do klasy widoku, rozwinięcie węzła typu rozwijanie Uzyskane typów podfolder, a następnie przeciągając tych typów na diagram klasy.
Aby uzyskać więcej informacji na temat dziedziczenia klas wielu zobacz Dziedziczenie wielokrotne i Wiele klas podstawowych.
Abstrakcyjne klasy
Klasa Designer obsługuje klasy abstrakcyjne (również o nazwie "abstrakcyjne klasy podstawowej").Są to klasy, która nigdy nie wystąpienia, ale z którego można czerpać innych klas.Za pomocą przykład z "Wielokrotne dziedziczenie" wcześniej w tym dokumencie, może być wystąpienia Bird klasy jako pojedyncze obiekty w następujący sposób:
int main()
{
Bird sparrow;
Bird crow;
Bird eagle;
}
Jednak może nie zamierzasz utworzyć wystąpienia Swimmer klasy jako pojedyncze obiekty.Zamierzasz może być tylko do innych rodzajów zwierząt klas od niej pochodzić, na przykład, Penguin, Whale, i Fish.W takim przypadku byłoby zadeklarować Swimmer klasy jako abstrakcyjna klasa podstawowa.
Aby zadeklarować jako abstrakcyjne klasy, można użyć abstract słowa kluczowego.Członkowie oznaczona jako abstrakcyjna lub częścią klasy abstrakcyjnej są wirtualne i musi być implementowane przez klasy, które dziedziczą z klasy abstrakcyjnej.
class Swimmer abstract
{
virtual void swim();
void dive();
};
Można również zadeklarować klasy jako abstrakcyjne, w tym co najmniej jedną funkcję wirtualną czystego:
class Swimmer
{
virtual void swim() = 0;
void dive();
};
Wyświetlenie tych zgłoszeń na diagramie klasy Nazwa klasy Swimmer i pure virtual function swim są w wyświetlane kursywą kształtu Klasa abstrakcyjna, wraz z notacji Klasa abstrakcyjna.Zauważ, że kształt klasa abstrakcyjna typu jest taki sam jak zwykłej klasy, z wyjątkiem, że jego obramowanie jest linią przerywaną.
Klasy pochodzącej od abstrakcyjna klasa podstawowa musi zastępować każdy czystego funkcję wirtualną w klasie bazowej lub nie można utworzyć wystąpienia klasy pochodnej.Tak, na przykład, jeśli Fish klasy z Swimmer klasy, Fish należy zastąpić swim metody:
class Fish : public Swimmer
{
void swim(int speed);
};
int main()
{
Fish guppy;
}
Po wyświetleniu tego kodu na diagramie klasy Projektant klasy rysuje dziedziczenia z Fish do Swimmer.
Anonimowe klas
Klasa Designer obsługuje anonimowe klas.Typy anonimowe klasy są klasy zadeklarowane bez identyfikatora.One nie mogą mieć konstruktora lub destruktor, nie mogą być przekazywane jako argumenty do funkcji i nie mogą być zwrócone jako wartości zwracane z funkcji.Można użyć klasy anonimowe zastąpić nazwę klasy o nazwie element typedef, jak w poniższym przykładzie:
typedef struct
{
unsigned x;
unsigned y;
} POINT;
Struktury mogą być również anonimowe.Projektant klasy wyświetlane klas anonimowe i struktury takie same, jak jest wyświetlana odpowiednich typów.Chociaż można zadeklarować i wyświetlane klas anonimowe i struktur, klasa Designer nie będzie używać nazwę znacznika, który określisz.Zastosuje on nazwę, która generuje widoku klasy.Klasy lub struktury pojawia się w widoku klasa i klasa Designer jako element o nazwie __unnamed.
Aby uzyskać więcej informacji o klasach anonimowego, zobacz Anonimowe typy klas.
Szablon klasy
Klasa Designer obsługuje wizualizacji szablonu klasy.Deklaracje zagnieżdżone są obsługiwane.W poniższej tabeli przedstawiono niektóre typowe deklaracji.
Element kodu |
Klasa projektanta widoku |
---|---|
template <class T> class A {}; |
A<T> Szablon klasy |
template <class T, class U> class A {}; |
A<T, U> Szablon klasy |
template <class T, int i> class A {}; |
A<T, i> Szablon klasy |
template <class T, template <class K> class U> class A {}; |
A<T, U> Szablon klasy |
W poniższej tabeli przedstawiono kilka przykładów częściowe specjalizacji.
Element kodu |
Klasa projektanta widoku |
---|---|
template<class T, class U> class A {}; |
A<T, U> Szablon klasy |
template<class T> class A<T, T> {}; |
A<T, T> Szablon klasy |
template <class T> class A<T, int> {}; |
A<T, int> Szablon klasy |
template <class T1, class T2> class A<T1*, T2*> {}; |
A<T1*, T2*> Szablon klasy |
W poniższej tabeli przedstawiono kilka przykładów dziedziczenia w częściowej specjalizacji.
Element kodu |
Klasa projektanta widoku |
---|---|
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> Szablon klasy B Klasa (punkty do klasy A) C Klasa (punkty do klasy A) |
W poniższej tabeli przedstawiono kilka przykładów częściowe specjalizacji funkcje szablonu.
Element kodu |
Klasa projektanta widoku |
---|---|
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 przeciążenie) |
template <class T1> class A { template <class T2> class B {}; }; template<> template<> class A<type>::B<type> {}; |
A<T1> Szablon klasy B<T2> Szablon klasy (B jest zawarty w klasy A, pod Zagnieżdżone typy) |
template <class T> class C {}; class A : C<int> {}; |
A Klasa -> C <int> C<T> Szablon klasy |
W poniższej tabeli przedstawiono kilka przykładów dziedziczenie szablonów.
Element kodu |
Klasa projektanta widoku |
---|---|
template <class T> class C {}; template<> class C<int> { class B {}; } class A : C<int>::B {}; |
A Klasa -> b C<int> Klasa (B jest zawarty w klasy c pod Zagnieżdżone typy) C<T> Szablon klasy |
W poniższej tabeli przedstawiono przykłady połączenia kanoniczny wyspecjalizowane klasy.
Element kodu |
Klasa projektanta widoku |
---|---|
template <class T> class C {}; template<> class C<int> {}; class A : C<int> {}; class D : C<float> {}; |
A Klasa -> c <int> C<int> Klasa C<T> Szablon klasy D Klasa -> c <float> |
class B { template <class T> T min (const T &a, const T &b); }; |
B min <T> |
Zobacz też
Informacje
Koncepcje
Praca z kodem Visual C++ (Projektant klas)