C++_7주차_정리

728x90

생성자(Constructor) 소멸자(Destructor)

-생성자 객체 생성 시 자동으로 실행되는 함수이다.

-주로 멤버 변수들의 초기값 지정하는 일을 한다.

 

-소멸자 - 생성자와 반대되는 개념이다.

 

생성자의 특징들

1) 특별한 멤버함수이다.

2) 생성자의 이름은 클래스 이름과 같다.

3) 생성자는 따로 자료형 지정 X

4) 생성자는 멤버변수들을 초기화한다.

5) 생성자 오버로딩을 통해서 객체마다 다양한 초기값 갖게 만든다.

 

소멸자의 특징들

1) 소멸자는 객체가 소멸될 때, 자동으로 실행되는 함수이다.

2) 소멸자는 객체 정리해주는 멤버함수이다.

3) 소멸자 이름은 클래스 이름과 같은데 이름 앞에 ~기호붙인다

4) 소멸자는 자료형을 지정 X

5) 소멸자는 매개변수를 지정할 수 없다.

class 클래스이름 {
private:

//필드(멤버변수)

public:

//생성자 -(1): 매개변수 없는 생성자

클래스이름() {

}

//생성자 -(2) : 매개변수 있는 생성자

클래스이름(......) {

}

//소멸자 : ~붙음

~클래스이름() {

}

//일반 멤버 함수들

};

(1) class Television 만들어 Set, Get()

//7주차 수업-(1) (객체지향 클래스 개념) 
#include <iostream>
#include <string>

using namespace std;

class Television {
	//필드
private:
	int inch; //화면 크기 : 유효범위는 [1~50]
	int channel; //채널 번호 : 유효범위는 [1~100]
	int volume; //소리 크기  : 유효범위는 [0~100]

	//메소드 
public:
	void Initialize() { //내부 초기화 함수 
		inch = 50;
		channel = 1;
		volume = 0;
	}
	int GetInch() {
		return inch;
	}
	void SetInch(int pInch) {

		if (1 <= pInch <= 50) { //유효범위 안에 들어가는 값이면 
			inch = pInch;
			cout << "Inch has been changed to " << inch << endl;
		}
		if ((pInch < 1) || (pInch > 50)) { //유효범위 벗어난 값이면 
			cout << "Inch can not be changed to" << pInch << "because of out of range [ 1~50]" << endl;
		}
	}

	int GetChannel() {
		return channel;
	}
	void SetChannel(int pChannel) {
		if ((pChannel >= 1) && (pChannel <= 100)) {
			channel = pChannel;
			cout << "Channel has been changed to  " << channel << endl;
		}
		if ((pChannel < 1) || (pChannel > 100)) {
			cout << "Channel can not be changed to " << pChannel << "because of out of range [1 ~ 100]" << endl;
		}
	}
	int GetVolume() {
		return volume;
	}
	void SetVolume(int pVolume) {
		if ((pVolume >= 0) && (pVolume <= 100)) {
			volume = pVolume;
			cout << "Volume has been changed to  " << volume << endl;
		}
		if ((pVolume < 0) || (pVolume > 100)) {
			cout << "Volume can not be changed to " << pVolume << "because of out of range [0 ~ 100]" << endl;
		}
	}

};

int main() {

	Television SStv, LGtv, HDtv;

	//SStv 객체 
	SStv.SetInch(50); //화면크기 50인치 set
	SStv.SetChannel(10); //채널 10번 
	SStv.SetVolume(5); //볼륨 5  

	cout << endl << endl;
	cout << "SStv : " << endl;
	cout << "Inch = " << SStv.GetInch() 
		<< "Channel = " << SStv.GetChannel() 
		<< "Volume = " << SStv.GetVolume() << endl;

	//LGtv 객체
	LGtv.SetInch(150); //화면크기 150인치 set
	LGtv.SetChannel(110); //채널 110번 
	LGtv.SetVolume(15); //볼륨 15  
	
	cout << endl<<endl;
	cout << "LGtv : " << endl;
	cout << "Inch = " << LGtv.GetInch()
		<< "Channel = " << LGtv.GetChannel()
		<< "Volume = " << LGtv.GetVolume() << endl;
	
	//SStv 다시 세팅 
	SStv.SetInch(330);
	cout << endl << endl;
	cout << "Inch = " << SStv.GetInch()
		<< "Channel = " << SStv.GetChannel()
		<< "Volume = " << SStv.GetVolume() << endl;

	SStv.SetChannel(60);
	cout << endl << endl;
	cout << "Inch = " << SStv.GetInch()
		<< "Channel = " << SStv.GetChannel()
		<< "Volume = " << SStv.GetVolume() << endl;

	getchar();
	getchar();
	return 0;
}

 

(2) 생성자 오버로딩 개념 

   -오버로딩(중복 정의) : 이름은 같은데, 매개변수 개수나 타입이 다른 여러 개의 함수 선언하는 것 

    cf. 오버라이딩(재정의) : 상속 개념에서 부모의 멤버함수를 자식이 필요한 입맛대로 다시 재정의하여 사용하는 것

//7주차 수업-(2) (객체지향 클래스 개념) 
#include <iostream>
#include <string>

using namespace std;

class Television {
//멤버변수
private:
	int inch; //화면 크기 : 유효범위는 [1~50]
	int channel; //채널 번호 : 유효범위는 [1~100]
	int volume; //소리 크기  : 유효범위는 [0~100]

//멤버함수들
public:
	//생성자 오버로딩 
	//생성자 -(1) : 매개변수 없는 생성자 
	Television() {
		inch = 50;
		channel = 1;
		volume = 0;
	}
	//생성자 -(2) : 매개변수 있는 생성자
	Television(int pInch, int pChannel, int pVolume) {
		inch = pInch;
		channel = pChannel;
		pVolume = pVolume;
	}
	//소멸자
	~Television() {

	}	
	int GetInch() {
		return inch;
	}
	void SetInch(int pInch) {

		if (1 <= pInch <= 50) { //유효범위 안에 들어가는 값이면 
			inch = pInch;
			cout << "Inch has been changed to " << inch << endl;
		}
		if ((pInch < 1) || (pInch > 50)) { //유효범위 벗어난 값이면 
			cout << "Inch can not be changed to" << pInch << endl;
		}
	}
	int GetChannel() {
		return channel;
	}
	void SetChannel(int pChannel) {
		if ((pChannel >= 1) && (pChannel <= 100)) {
			channel = pChannel;
			cout << "Channel has been changed to  " << channel << endl;
		}
		if ((pChannel < 1) || (pChannel > 100)) {
			cout << "Channel can not be changed to " << pChannel << endl;
		}
	}
	int GetVolume() {
		return volume;
	}
	void SetVolume(int pVolume) {
		if ((pVolume >= 0) && (pVolume <= 100)) {
			volume = pVolume;
			cout << "Volume has been changed to  " << volume << endl;
		}
		if ((pVolume < 0) || (pVolume > 100)) {
			cout << "Volume can not be changed to " << pVolume << endl;
		}
	}
};

int main() {

	Television SStv, LGtv; //C++ 에서 일반 선언 = (기본)생성자로 객체 생성 
	cout << "SStv: " << endl;
	cout << "Inch = " << SStv.GetInch()
		<< ", Channel = " << SStv.GetChannel()
		<< ", Volume = " << SStv.GetVolume() << endl;
	
	cout << endl;
	cout << "LGtv: " << endl;
	cout << "Inch = " << LGtv.GetInch()
		<< ", Channel = " << LGtv.GetChannel()
		<< ", Volume = " << LGtv.GetVolume() << endl;


	Television HDtv(30, 1, 0); //객체 생성 
	cout << endl;
	cout << "HDtv: " << endl;
	cout << "Inch = " << HDtv.GetInch()
		<< ", Channel = " << HDtv.GetChannel()
		<< ", Volume = " << HDtv.GetVolume() << endl;



	getchar();
	getchar();
	return 0;
}​

728x90

'C++, C언어 > [문법]_C++' 카테고리의 다른 글

C++_9주차_정리  (0) 2021.12.20
C++_8주차_정리  (0) 2021.12.20
C++_6주차_정리  (0) 2021.12.20
C++_5주차_정리  (0) 2021.12.20
C++_4주차_정리  (0) 2021.12.20