본문 바로가기
Coding Test/C++ 기초

[C++ 기초] 클래스

by seoyamin 2022. 8. 3.

1. 클래스란 ?

클래스는 멤버 변수와 멤버 함수를 묶어서 저장할 수 있는 틀, 단위이다.

 

1-1. 클래스 vs. 구조체

  C C++
구조체가
포함 가능한 것
멤버 변수 멤버 변수
멤버 함수

C와 달리 C++의 구조체는 멤버 변수 뿐만 아니라 멤버 함수 또한 포함할 수 있는데, 이러한 점에서 C++의 클래스는 구조체의 상위 호환으로 설명된다. (구조체와 거의 동일한 개념!)

  • Property : 클래스 내부 멤버 변수
  • Method : 클래스 내부 멤버 함수

다만, C++에서 클래스와 구조체는 기본 접근 제어자에서 차이를 보인다.

  • C++ 구조체 : 기본 접근 제어자 public
  • C++ 클래스 : 기본 접근 제어자 private

 

1-2. 클래스 vs. 인스턴스

클래스 인스턴스 (=객체)
인스턴스를 만들기 위한 틀 클래스를 바탕으로 만들어진 실제 객체
ex ) 초등학생 (학교, 학년, 반, 이름) ex ) 학생1 (행복초, 1학년, 3반, 김해피)

 

1-3. 클래스와 객체 지향 프로그래밍

  • 객체 (Object) : 노트북, 마우스, 키보드 등 모든 물체
    • 객체 = 상태 (state) + 행동 (behavior) = 변수 + 함수
  • 객체 지향 프로그래밍 (Object Oriented Programming)
    • 프로그램을 여러 독립된 객체들의 모임으로 해석하는 개념
    • 객체의 상태와 행동을 구체화하는 형식으로 코드를 구성함

 

OOP를 위해 객체를 만들어내는 틀이 바로 클래스이다.

 

 


 

2. 클래스의 사용

2-1. 클래스 구성

선언부 구현부
클래스의 틀을 정의 클래스의 멤버 함수를 구체적으로 구현
틀 : 클래스명, 멤버 변수, 멤버 함수 원형 (리턴 타입, 매개 변수 등) 범위 지정 연산자 :: 사용
// 선언부
class Person {
private :
	char *name;
	int age;

public:
	int birth();
};

// 구현부
int Person::birth() {
	return 2022-age+1;
}

int main() {
	Person p1;
	
	p1.name = "Kim";
	p1.age = 20;

  	cout << "출생 연도는 " << p1.birth() << endl;

	return 0;
}

 

2-2. 생성자

생성자는 클래스를 바탕으로 객체를 생성할 때 수행하는 초기 작업을 미리 설정해 놓은 함수이다.

  • 변수 값을 설정하기
  • 메모리 동적 할당 받기

 

▷ 생성자의 특성

  • 객체 생성 시점에 한번만 실행됨 (자동으로 실행)
  • 생성자명은 클래스명과 동일해야 함
  • 별도의 리턴 타입을 가지지 않음
  • 생성자는 중복이 가능하지만, 매개변수의 타입이나 개수에 차이가 있어야 함
  • 만약 아무런 생성자도 정의하지 않으면, 컴파일러가 자동으로 기본 생성자를 삽입한다.
    • 기본 생성자 : 매개변수가 없는 생성자
    • 객체의 생성을 위해서는 반드시 생성자가 존재해야 하기 때문이다.
// 선언부
class Person {
private :
	char *name;
	int age;

public:
	int birth();
};

// 구현부 (생성자)
Person::Person() {
	int age = 20;
	cout << "생성자1 실행됨" << endl;
};

Person::Person(int a) {
	int age = a;
	cout << "생성자2 실행됨" << endl;
};

// 구현부 (멤버 함수 구현)
int Person::birth() {
	return 2022-age+1;
}

int main() {
	Person p1;  // 매개변수 없는 생성자1 실행됨
	p1.name = "Kim";

	Person p2(30);  // 매개변수 있는 생성자2 실행됨

	return 0;
}

 

 

2-3. 접근 지정자

public < protected < private

 

public protected private
모든 함수에서 접근 가능
(클래스 내/외)
클래스 내 모든 멤버 함수와
이 클래스를 상속받는 자녀 클래스의
멤버 함수에서 접근 가능
클래스 내 모든 멤버 함수에서
접근 가능

 

 

'Coding Test > C++ 기초' 카테고리의 다른 글

[C++ 기초] 오버로딩  (0) 2022.08.11
[C++ 기초] 상속  (0) 2022.08.03
[C++ 기초] 포인터  (0) 2022.07.20
[C++ 기초] 배열  (0) 2022.07.20
[C++ 기초] 조건문, 반복문  (0) 2022.07.13