나만의 작은 도서관
[C++] 탐구 일지 #4. struct와 class의 차이 본문
배경
여기저기 코드를 보다 보면 class의 전유물이라고 생각했던 기능들이 struct에서 멀쩡히 돌아가는 경우를 종종 보았다. 이것도 돼? 저것도 돼? 하며 놀란적이 한두 번이 아닌데, 이번 시간에는 struct가 어디까지 가능한지 알아보도록 한다.
C++에서 struct와 class는 맥락상 동일하다.
매우 충격적인 결과지만 사실이다. 유일한 차이점으로 기본 접근 지정자(Access specifier)가 struct은 public, class는 private이다. 이거 말곤 전부 똑같다. (어셈블리 언어로 변환해서 봐도 완전히 동일한 구조를 가지고 있다.)
아래 코드에서의 MyStruct와 MyClass는 기본 접근 지정자만 다를뿐 완전히 같다.
#include <iostream>
using namespace std;
struct MyStruct{
// public:
int a = 10;
int b = 20;
};
class MyClass{
// private:
int a = 10;
int b = 20;
};
int main(){
MyStruct myStruct;
cout << myStruct.a << '\n'; // 10
MyClass myClass;
cout << myClass.a << '\n'; // Error: 멤버 "MyClass::a" (선언됨 줄 13)에 액세스할 수 없습니다.
}
정말로 다된다.
#include <iostream>
using namespace std;
struct MyStruct
{
/* 순수 가상 함수 */
virtual void virtualFunc() = 0;
/* public 멤버 변수 */
public:
int a = 10;
int b = 20;
};
struct MyStruct2 : public MyStruct
{
/* 생성자, 소멸자 */
public:
MyStruct2() { cout << "MyStruct2 생성" << '\n';}
~MyStruct2() { cout << "MyStruct2 소멸" << '\n';}
/* 멤버 함수 */
public:
void print_a() {
cout << _a << '\n';
}
/* 순수 가상 함수 재정의(override) */
virtual void virtualFunc() override {
cout << "virtualFunc" << '\n';
}
/* private 멤버 변수 */
private:
int _a = 11;
int _b = 12;
};
int main(){
{
MyStruct2 myStruct2;
cout << myStruct2.a << '\n';
myStruct2.print_a();
myStruct2.virtualFunc();
}
}
실행 결과
MyStruct2 생성
10
11
virtualFunc
MyStruct2 소멸
참고 자료
https://learn.microsoft.com/ko-kr/cpp/cpp/classes-and-structs-cpp?view=msvc-170
클래스 및 구조체(C++)
자세한 정보: 클래스 및 구조체(C++)
learn.microsoft.com
'C++ > 문법 및 메소드(STL)' 카테고리의 다른 글
[C++] 탐구 일지 #5. 열거형(enum, enum class) (0) | 2025.02.19 |
---|---|
[C++] 탐구 일지 #3. 정적 변수(static 키워드) (0) | 2025.02.18 |
[C++] 탐구 일지 #2. 타입의 별칭: typedef, using 키워드 (0) | 2024.12.21 |
[C++] 탐구 일지 #1. 소속을 구분하기 위한 네임스페이스(namespace) (0) | 2024.12.21 |
[문자열] 문자열을 정수로 stoi(), 숫자를 문자열로 to_string() (0) | 2024.03.21 |