[C++] class struct 차이

kimyb·2023년 1월 10일

structclass는 비슷하면서도 여러가지 차이점을 가지고 있다.

1. 기본 접근 지정자(Default Access Specifier):

  • struct는 기본적으로 멤버 변수와 멤버 함수를 public

  • class는 기본적으로 멤버 변수와 멤버 함수를 private

    예시:

    struct MyStruct {
        int x;  // 외부에서 접근 가능 (public)
    };
    
    class MyClass {
    public:
        int y;  // 외부에서 접근 가능
    private:
        int z;  // 외부에서 직접 접근 불가능 (private)
    };



2. 상속에 따른 접근 지정자(Inheritance Access Specifier):

  • struct은 상속에서 기본적으로 public 접근 지정자로써,
    구조체로부터 상속한 멤버들은 외부에서 public으로 접근 가능.

  • class은 상속에서는 기본적으로 private 접근 지정자로써,
    상속한 멤버들은 외부에서 private으로 접근 불가능.

    예시:

    struct BaseStruct {
        int a;  // 상속된 멤버는 public으로 유지
    };
    
    class BaseClass {
    public:
        int b;  // 상속된 멤버는 private으로 변경
    };



3. 기본 값 초기화:

  • class: 기본적으로 초기화되지 않음. 멤버 변수를 선언한 후에 초기화를 별도로 해주어야 함.

  • struct: 기본적으로 "0"으로 초기화. 숫자형 멤버 변수는 0으로 초기화되고, 포인터 멤버 변수는 nullptr로 초기화.

예시:

class MyClass {
public:
    int num; // 초기화 X
};

struct MyStruct {
    int num; // 0으로 초기화
};



4. 생성자:

  • class: 클래스 내에서 생성자(constructor)를 정의할 수 있고, 클래스 객체가 생성될 때 자동 호출.
  • struct: 생성자를 명시적으로 정의하지 않으면 컴파일러는 default constructor를 제공하여, 생성자를 호출할 때에는 struct 키워드를 사용하지 않아도 된다.

예시:

class MyClass {
public:
    MyClass() {
        // 생성자 정의
    }
};

struct MyStruct {
    MyStruct() {
        // 생성자 정의
    }
};

MyClass obj_C; // 클래스의 객체 생성
MyStruct ob_S; // 구조체의 객체 생성



5. 메모리 할당 차이점:

차이점 중에서 가장 많이 얘기하는 메모리 부분이다.

  • class: 기본적으로 class 객체는 동적 할당 된다. 클래스 객체를 생성할 때 new 키워드를 사용하여 힙(heap) 메모리에 할당하며, 객체의 수명은 delete로 직접 관리.

    MyClass* obj = new MyClass; // 힙 메모리에 할당
  • struct: 주로 스택(stack) 메모리에 할당 된다. 구조체 객체를 선언할 때 자동으로 스택에 할당되며, 객체의 수명은 스코프(scope)에 따라 관리.

    MyStruct obj; // 스택에 구조체 객체 할당



profile
공부했던것을 정리.

0개의 댓글