관리 메뉴

Storage Gonie

(8) C++ 구조체 사용방법(구조체, 클래스 차이점) 본문

알고리즘/문제해결을 위한 C++ 공부

(8) C++ 구조체 사용방법(구조체, 클래스 차이점)

Storage Gonie 2019. 4. 22. 16:06
반응형

# 구조체 정의 방법

- 구식 컴파일러 버전에서는 'struct' 앞에 'typedef'를 넣어줘야 한다.(신형의 경우 생략가능)

- 구식 컴파일러 버전에서는 구조체 멤버변수를 선언할 때 초기화해줘야 한다.(신형의 경우 상관없음)

struct Point2D{
    int x;
    int y;
};
struct Point2D{
    int x;
    int y;
    
    void init(int x, int y)
    {
    	this->x = x;
        this->y = y;
    }
    
    void printPoint2D()
    {
    	cout << "(" << x << ", " << y << ")" << endl;
    }
};

 

# 구조체를 이용한 객체 생성방법

struct Point2D
{
    int x;
    int y;
};

int main(void)
{
    // 첫 번째 방법 : 선언과 동시에 멤버변수 초기화
    Point2D p1 = {1, 0};
    p3.printPoint2D(); // (1, 0)
    
    // 두 번째 방법 : 선언 후 멤버변수 초기화
    Point2D p2;
    p2.x = 4;
    p2.y = 5;
    p2.printPoint2D(); // (4, 5)
    
    // 세 번째 방법 : 선언 후 멤버변수 초기화
    Point2D p3;
    p3.init(3,5);
    p3.printPoint2D(); // (3, 5)
}

 

# 구조체 배열 사용방법

struct Point2D
{
    int x;
    int y;
};

int main(void)
{
    Point2D p[5];
   
    // 각각의 변수에는 아래와 같이 접근가능
    for (int i = 0; i < 5; i++)
    {
        p[i].x = i;
        p[i].y = i;
    }
}

 

# 구조체와 클래스의 공통점 및 차이점

@ 공통점

- 둘 다 변수, 메소드를 하나로 묶는 방법으로 아래의 차이점을 제외하고는 같다.

- 둘 다 변수, 함수, 생성자, 소멸자를 내부에서 선언할 수 있고, 상속구조를 사용할 수 있다.

'접근제어 지시자(pubic, protected, private)' 가 존재하며, 구조체, 클래스 모두 접근제어 지시자를 사용할 수 있다.

 

@ 차이점

- 구조체의 경우 접근제어 지시자를 따로 명시하지 않는다면 모든 변수와 함수는 public으로 선언된다.

- 클래스의 경우 접근제어 지시자를 따로 명시하지 않는다면 모든 변수와 함수는 private으로 선언된다.

- 일반적인 경우 각각은 아래와 같은 형태로 코딩한다.

- 구조체는 멤버변수, 멤버함수 모두 public으로 선언하여 구조체 외부에서 멤버변수를 쉽게 수정할 수 있게 하는 반면

- 클래스는 멤버변수를 priavate로, 멤버함수는 public으로 선언하여 멤버함수를 통해서만 멤버변수를 수정할 수 있게 설계한다.

반응형
Comments