본문 바로가기
Language&Framework&Etc/C++

구조체 및 클래스 간단히 정리(C와 C++)

by 머리올리자 2021. 1. 9.

구조체의 탄생 이유

  • 관련 있는 데이터를 한꺼번에 묶으면, 관리 및 사용이 용이함 (ex, 캐릭터 생성, 자동차 제조, 빵 제조 등등..)

구조체


C언어 구조체 변수 선언

struct Bread sickbbang;
struct Bread soboru;

만약 struct를 생략하고 싶을 때, 구조체에 typedef를 붙여 아래와 같이 정의해야 한다.

typedef struct bread
{
	...
	...
}Bread;

그럼 아래와 같이 선언 가능

Bread sickbbang;
Bread soboru;

C++ 구조체 변수 선언

typedef 선언 없이도 아래과 같이 변수 선언 가능

struct bread
{
	...
	...
};
bread sickbbang;
bread soboru;

C++ 함수가 구조체 안에 없을 때와 있을 때

1. 관련 함수가 구조체 안에 없을 때 (전역함수의 형태)

void showbakery(const Bread &bread)
{
	cout << "빵 종류 :" << bread.name << endl;
	cout << "빵 가격 : " << bread.price << endl << endl;
}

 

2. 관련 함수가 구조체 안에 있을 때 (구조체 함수의 형태)

void showbakery()
{
	cout << "빵 종류 :" << name << endl;
	cout << "빵 가격 : " << price << endl << endl;
}

 

3. 관련 함수가 구조체 안에 원형선언으로 있고 정의는 밖으로

struct bread
{
	...
	void showbakery();
	...
};


void bread::showbakery()
{
	cout << "빵 종류 :" << name << endl;
	cout << "빵 가격 : " << price << endl << endl;
}

3번처럼 코드를 관리하는게 한눈에 알아볼 수 있다.

 


클래스

struct 대신 class를 사용하면, 구조체에서 클래스로 정의

 

클래스는 아래의 구조체 초기화 방식처럼 초기화하지 못함

bread soboru = {"soboru", 2000};

별도의 선언이 없을 시, 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능하다.

 

따라서 아래의 형태처럼 클래스 선언(클래스 변수에 접근할 수 없기 때문에)

bread soboru;

접근을 가능하게 하는 방법

  • 접근과 관련해서 별도의 선언이 없으면, 클래스 내에 선언된 변수 및 함수에 대한 접근은 허용하지 않음
  • 따라서 접근과 관련된 지시자를 별도로 해라!

접근제어 지시자

  • public : 모든 접근 허용
  • protected : 상속관계 시, 유도 클래스에서 접근허용
  • private : 클래스 내에서만 접근 허용

구조체와 클래스의 공통점

  • 둘 다 접근제어 지시자의 선언이 가능하고, 그 의미도 동일

구조체와 클래스의 차이

  • 구조체에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 public
  • 클래스에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 private