클래스 멤버 선언 구문
일반적으로 클래스 데이터 멤버 및 함수 멤버는 선언에 대한 규칙 다음에 선언됩니다. 구성 순서는 다음과 같습니다.
선언 지정자. 클래스에서 저장소 클래스 지정자인 static 및 mutable은 데이터 멤버에 사용됩니다. cv 한정자 const 및 volatile은 데이터 및 함수 멤버에 사용됩니다. 선언 지정자 friend, static, virtual 및 inline은 함수에 사용됩니다. friend가 비멤버 함수를 나타내더라도 가능합니다.
이니셜라이저가 없는 선언자. 가상 함수의 경우 함수 선언자 다음에 = 0 형식의 순수 지정자를 사용하여 순수 가상 함수(해당 클래스에서 구현되지 않은 가상 함수)를 지정합니다.
비트 필드(선택). 비트 필드를 참조하십시오.
또는
- 함수 정의. 클래스에 함수 정의를 포함시킬 수 있습니다. 그렇게 정의된 멤버 함수는 자동으로 인라인으로 간주됩니다.
또는
- 멤버 템플릿. 클래스 템플릿의 멤버에서 C++ 멤버 템플릿의 설명을 참조하십시오.
멤버 데이터는 auto, extern 또는 register 저장소 클래스로 선언할 수 없습니다. 그러나 정적 저장소 클래스를 가지는 것으로는 선언될 수 있습니다.
friend 클래스를 멤버 목록에서 선언할 때 멤버 선언자 목록을 생략할 수 있습니다. friends에 대한 자세한 내용은 friend 지정자 및 Friends를 참조하십시오. 제공되지 않은 클래스 이름이라도 friend 선언에 사용할 수 있습니다. 이 friend 선언은 이름을 제공합니다. 그러나 이러한 클래스 멤버 선언에서 상세 형식 지정자 구문은 다음 예제와 같이 사용되어야 합니다.
// class_member_declaration_syntax.cpp
// compile with: /c
struct HasFriends {
friend class NotDeclaredYet;
};
앞의 예제에서는 클래스 선언 후에 멤버 선언자 목록이 나타나지 않습니다. NotDeclaredYet에 대한 선언이 아직 처리되지 않았기 때문에 상세 형식 지정자 형식인 class NotDeclaredYet이 사용됩니다. 선언된 형식은 일반 형식 지정자를 사용하여 friend 멤버 선언에 지정할 수 있습니다.
// class_member_declaration_syntax2.cpp
// compile with: /c
struct AlreadyDeclared {};
struct HasFriends {
friend AlreadyDeclared;
};
다음 예제에서 순수 지정자는 선언되는 가상 함수가 구현되지 않음을 나타냅니다. 따라서 순수 지정자는 가상 함수에만 지정할 수 있습니다. 다음 예제를 고려해 보십시오.
// class_member_declaration_syntax3.cpp
// compile with: /c
class StrBase { // Base class for strings.
public:
virtual int IsLessThan( StrBase& ) = 0;
virtual int IsEqualTo( StrBase& ) = 0;
virtual StrBase& CopyOf( StrBase& ) = 0;
};
앞의 코드는 추상 기본 클래스, 즉 보다 구체적인 클래스의 기본 클래스로만 사용되도록 설계된 클래스를 선언합니다. 이 같은 기본 클래스는 순서 지정자를 사용하여 하나 이상의 가상 함수를 "순수" 가상 함수로 선언함으로써 특정 프로토콜 또는 일련의 기능을 강화할 수 있습니다.
StrBase 클래스에서 상속된 클래스는 순수 가상 함수에 구현을 제공해야 합니다. 그렇지 않으면 추상 기본 클래스로 간주됩니다.
추상 기본 클래스는 개체를 선언하는 데 사용할 수 없습니다. 예를 들어 StrBase에서 상속된 형식의 개체를 선언하기 전에 IsLessThan, IsEqualTo 및 CopyOf 함수를 구현해야 합니다. 추상 기본 클래스에 대한 자세한 내용은 추상 클래스를 참조하십시오.