클래스 디자이너의 Visual C++ 클래스

클래스 디자이너는 C++ 클래스를 지원하며, C++ 클래스가 여러 상속 관계를 포함한다는 점을 제외하고 Visual Basic 및 Visual C# 클래스 모양과 동일한 방식으로 네이티브 C++ 클래스를 시각화합니다. 클래스 모양을 확장하여 추가 필드와 메서드를 클래스에 표시하거나 축소하여 공간을 절약할 수 있습니다.

참고

클래스 디자이너는 공용 구조체(해당 데이터 멤버 중 가장 큰 데이터 멤버에 필요한 만큼만 메모리가 할당되는 특수한 클래스 형식)를 지원하지 않습니다.

단순 상속

둘 이상의 클래스를 클래스 다이어그램으로 끌면 클래스에는 클래스 상속 관계가 설정되고 화살표가 클래스를 연결합니다. 화살표는 기본 클래스의 방향을 가리킵니다. 예를 들어 다음 클래스가 클래스 다이어그램에 표시되면 화살표는 B에서 A를 가리키도록 클래스를 연결합니다.

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

클래스 B만 클래스 다이어그램으로 끌어 B에 대한 클래스 모양을 마우스 오른쪽 단추로 클릭한 다음 기본 클래스 표시를 클릭할 수도 있습니다. 그러면 기본 클래스가 A로 표시됩니다.

다중 상속

클래스 디자이너는 다중 클래스 상속 관계의 시각화를 지원합니다. 다중 상속은 파생 클래스에 둘 이상의 기본 클래스의 특성이 있을 때 사용됩니다. 다음은 다중 상속의 예입니다.

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

둘 이상의 클래스를 클래스 다이어그램으로 끌면 클래스에는 다중 클래스 상속 관계가 설정되고 화살표가 클래스를 연결합니다. 화살표는 기본 클래스의 방향을 가리킵니다.

클래스 모양을 마우스 오른쪽 단추로 클릭한 다음 기본 클래스 표시를 클릭하면 선택한 클래스에 대한 기본 클래스가 표시됩니다.

참고

C++ 코드에는 파생 클래스 표시 명령이 지원되지 않습니다. 클래스 뷰로 이동하여 형식 노드를 확장하고 파생 형식 하위 폴더를 확장한 후 해당 형식을 클래스 다이어그램으로 끌어 파생 클래스를 표시할 수 있습니다.

다중 클래스 상속에 대한 자세한 내용은 (NOTINBUILD) 다중 상속다중 기본 클래스를 참조하세요.

추상 클래스

클래스 디자이너는 추상 클래스(“추상 기본 클래스” 라고도 함)를 지원합니다. 추상 클래스는 인스턴스화하지는 않고 여기에서 다른 클래스를 파생할 수는 있는 클래스입니다. 이 문서 앞부분에 있는 “다중 상속”의 예제를 사용하여 Bird 클래스를 개별 개체로 인스턴스화할 수 있습니다.

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

그러나 Swimmer 클래스를 개별 개체로 인스턴스화하지 않을 수도 있습니다. 예를 들어 Penguin, Whale, Fish와 같은 동물 클래스 형식만 파생할 수 있습니다. 이 경우에는 Swimmer 클래스를 추상 기본 클래스로 선언할 것입니다.

클래스를 추상으로 선언하려면 abstract 키워드를 사용할 수 있습니다. abstract로 표시되거나 추상 클래스에 포함된 멤버는 가상의 멤버이며, 추상 클래스에서 파생된 클래스에 의해 구현되어야 합니다.

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

순수 가상 함수를 하나 이상 포함하여 클래스를 abstract로 선언할 수도 있습니다.

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

이러한 선언을 클래스 다이어그램에 표시하면 클래스 이름 Swimmer 및 그 순수 가상 함수 swim추상 클래스라는 표기와 함께 가상 클래스 모양에 기울임꼴로 표시됩니다. 추상 클래스 형식 모양은 테두리가 점선인 점을 제외하고 일반 클래스와 동일합니다.

추상 기본 클래스에서 파생 클래스는 기본 클래스의 각 순수 가상 함수를 재정의해야 합니다. 그렇지 않으면 파생 클래스를 인스턴스화할 수 없습니다. 따라서 예를 들어 Swimmer 클래스에서 Fish 클래스를 파생하면 Fishswim 메서드를 재정의해야 합니다.

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

int main()  
{  
   Fish guppy;  
}  

이 코드를 클래스 다이어그램에 표시하면 클래스 디자이너는 Fish에서 Swimmer까지 상속 선을 그립니다.

익명 클래스

클래스 디자이너는 익명 클래스를 지원합니다. 익명 클래스 형식은 식별자 없이 선언된 클래스입니다. 익명 클래스는 생성자나 소멸자를 가질 수 없고, 인수로서 함수에 전달될 수 없으며, 함수에서 반환 값으로서 반환될 수 없습니다. 다음 예제와 같이 익명 클래스를 사용하여 클래스 이름을 Typedef 이름으로 바꿀 수 있습니다.

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

구조체는 익명일 수도 있습니다. 클래스 디자이너는 익명 클래스와 구조체를 해당 형식을 표시할 때와 같이 표시합니다. 익명 클래스와 구조체를 선언하고 표시할 수 있지만 클래스 디자이너는 사용자가 지정한 태그 이름을 사용하지 않습니다. 클래스 뷰가 생성하는 이름을 사용합니다. 클래스 또는 구조체는 클래스 뷰 및 클래스 디자이너에서 __unnamed라는 요소로 나타납니다.

익명 클래스에 대한 자세한 내용은 익명 클래스 형식을 참조하세요.

템플릿 클래스

클래스 디자이너는 템플릿 클래스의 시각화를 지원합니다. 중첩된 선언도 지원합니다. 다음 표는 몇 가지 일반적인 선언을 보여 줍니다.

Code 요소 클래스 디자이너 보기
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>

템플릿 클래스

다음 표는 부분 특수화의 몇 가지 예를 보여 줍니다.

Code 요소 클래스 디자이너 보기
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*>

템플릿 클래스

다음 표는 부분 특수화에서 상속의 몇 가지 예를 보여 줍니다.

Code 요소 클래스 디자이너 보기
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를 가리킴)

다음 표는 부분 특수화 템플릿 함수의 몇 가지 예를 보여 줍니다.

Code 요소 클래스 디자이너 보기
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개 오버로드)
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>

템플릿 클래스

다음 표는 템플릿 상속의 몇 가지 예를 보여 줍니다.

Code 요소 클래스 디자이너 보기
template <class T>

class C {};

template<>

class C<int> {

class B {};

}

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

클래스

->B

C<int>

클래스

(B는 클래스 C의 중첩 형식에 포함됨)

C<T>

템플릿 클래스

다음 표는 정식 특수 클래스 연결의 몇 가지 예를 보여 줍니다.

Code 요소 클래스 디자이너 보기
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++ 코드 작업(클래스 디자이너)
클래스 및 구조체
익명 클래스 형식
(NOTINBUILD) 다중 상속
다중 기본 클래스
템플릿