본문 바로가기

C++ 기초 1

[C++] 3-1 클래스 생성자(Constructor)

생성자 (Constructor)

   생성자 (Constructor)는 클래스 객체를 선언할 때 자동으로 수행되는 멤버함수로 클래스 이름과 동일하며 public멤버로 지정되어야 한다. 생성자 함수의 return 값이 없으므로 void형이지만 이마저 생략하고 사용한다. 생성자 함수는 오버로드가 가능하고 매개변수를 전달할 수 있다. 일반 멤버함수로도 데이터 멤버들의 값을 초기화할 수 있지만, 생성자 함수는 클래스 객체가 선언됨과 동시에 자동적으로 실행하므로 일반 멤버 함수보다 더욱 편리하다. 

 

예제
 
#include <iostream>
using namespace std;
class score {
private:
	char* name;
	int kor;
	int eng;
	double ave;
public:
	score(char* n, int k, int e);	//생성자 함수의 오버로드
	score(char* n, int k);			//생성자 함수의 오버로드
	void sum_ave();
	void output();
};

score::score(char* n, int k, int e)	//첫번째 생성자 함수 정의
{
	name = n;
	kor = k;
	eng = e;
}

score::score(char* n, int k)		//두번째 생성자 함수 정의
{
	name = n;
	kor = k;
	cout << name << "의 영어점수? ";
	cin >> eng;		//키보드로 영어 점수 입력
}

void score::sum_ave()
{
	ave = double(kor + eng) / 2.0;
}

void score::output()
{
	cout << "name=" << name << endl;
	cout << "kor=" << kor << endl;
	cout << "eng=" << eng << endl;
	cout << "ave=" << ave << endl;
}

int main()
{
	score x((char*)"Hong", 90, 95);		//객체 x 생성 //첫 번째 생성자 함수 사용
	score y((char*)"Kim", 85);			//객체 y 생성 //두 번째 생성자 함수 사용
	x.sum_ave();
	x.output();
	y.sum_ave();
	y.output();
	return 0;
}
실행 결과
Kim의 영어점수? 90
name=Hong
kor=90
eng=95
ave=92.5
name=Kim
kor=85
eng=90
ave=87.5
 
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13