C++_10주차_정리

728x90

[클래스 상속] : inheritance

: 클래스 상속은 이미 정의되어있는 부모 클래스의 멤버 변수, 멤버 함수들을 물려 받아서

상속받은 자식 클래스에서eh 그대로 사용 가능하도록 만들어진 기능이다.

-자식 클래스에서는

              부모 클래스 속 public, protected로 선언된 멤버들을 사용O

                                                private 로 선언된 멤버는 사용 X

 

class 자식클래스이름 : public 부모클래스이름 {

private:

//멤버변수 선언

public:

//멤버함수 선언

};

[상속, 생성자]

-기본적으로 (부모 생성자 -> 자식 생성자 -> 자식 소멸자 -> 부모 소멸자) 순으로 호출된다.

-특별히 부모 생성자 지정X

-> 부모의 기본생성자가 가장 먼저 자동 호출된다.

-특별히 부모 생성자 지정O

-> 자식 생성자 헤더 뒤에 : 콜론 추가 후 원하는 부모 클래스 생성자 적으면 된다

 자식생성자() : 부모생성자(x, y ... ) {

}

//10주차 - 클래스 상속 
#include <iostream>
#include <string>

using namespace std;

class Television { //부모클래스 
private:
	int inch; //화면 크기 
	int channel; //채널 번호 
	int volume; //소리 크기  

public:
	//생성자 -(1) : 매개변수 없는 생성자 
	Television() {
		inch = 50;
		channel = 10;
		volume = 0;
	}
	//생성자 -(2) : 매개변수 있는 생성자
	Television(int pInch, int pChannel, int pVolume) {
		inch = pInch;
		channel = pChannel;
		pVolume = pVolume;
	}
	//소멸자
	~Television() {
	}
	//Get, Set()
	int GetInch() {
		return inch;
	}
	void SetInch(int pInch) {
		inch = pInch;
	}
	int GetChannel() {
		return channel;
	}
	void SetChannel(int pChannel) {
		channel = pChannel;
	}
	int GetVolume() {
		return volume;
	}
	void SetVolume(int pVolume) {
		volume = pVolume;
	}
};


class OLEDTV : public Television { //자식 클래스 
private:
	//기본적으로 부모의 멤버도 다 갖고 있고/ 자식클래스에 추가로 필요한 멤버들 선언
	int USB; //usp 포트 개수 
	bool HDMI; 
	bool DigitalCamera;

public:
	OLEDTV() : Television() { //생성자 - (1) _ 부모의 기본생성자를 지정 자식 생성자 선언
		USB = 5;
		HDMI = true;
		DigitalCamera = false;
	}
	OLEDTV(int pInch, int pChannel, int pVolume, int pUSB, bool pHDMI, bool pDigitalCamera) 
							: Television(pInch, pChannel, pVolume){ 
					      //생성자 - (2) _부모의 생성자 지정하여 자식 생성자 선언 
		USB = pUSB;
		HDMI = pHDMI;
		DigitalCamera = pDigitalCamera;
	}
	//소멸자 
	~OLEDTV() {

	}
	//Get, set()
	int GetUSB() {
		return USB;
	}
	void SetUSB(int pUSB) {
		USB = pUSB;
	}
	bool GetHDMI() {
		return HDMI;
	}
	void SetHDMI(bool pHDMI) {
		HDMI = pHDMI;
	}
	bool GetDigitalCamera() {
		return DigitalCamera;
	}
	void SetDigitalCamera(bool pDigitalCamera) {
		DigitalCamera = pDigitalCamera;
	}
};

int main() {
	//부모클래스 객체 생성 
	Television SStv;
	Television LGtv(30, 20, 10);
	
	//자식클래스 객체 생성 
	OLEDTV SKtv; 
	OLEDTV LStv(50, 40, 30,     4, false, false);
	
	bool result;

	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;

	//자식 객체 출력 
	cout << endl;
	cout << "SKtv " << endl;
	cout << "Inch = " << SKtv.GetInch()
		<< ", Channel = " << SKtv.GetChannel()
		<< ", Volume = " << SKtv.GetVolume()
		<< ", USB = " << SKtv.GetUSB() << endl;

	if (SKtv.GetHDMI() == true) cout << "HDMI 존재" << endl<<endl;
	if (SKtv.GetHDMI() == false) cout << "HDMI 없음 " << endl<<endl;

	if (SKtv.GetDigitalCamera() == true) cout << "캠 존재 " << endl<< endl;
	if (SKtv.GetDigitalCamera() == false) cout << "캠 없음" << endl<<endl;


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

[함수 오버라이딩(재정의)]

-자식 클래스에서는 상속받은 부모의 멤버함수들을 자신의 필요에 맞춰 변경(재정의)할 수 있다.

-자식클래스에는 재정의된 함수를 우선 호출한다.

#include <iostream>
#include <string>

using namespace std;

class Television { //부모클래스 
private:
	int inch; //화면 크기 
	int channel; //채널 번호 
	int volume; //소리 크기  

public:
	//생성자 -(1) : 매개변수 없는 생성자 
	Television() {
		inch = 50;
		channel = 10;
		volume = 0;
	}
	//생성자 -(2) : 매개변수 있는 생성자
	Television(int pInch, int pChannel, int pVolume) {
		inch = pInch;
		channel = pChannel;
		pVolume = pVolume;
	}
	//소멸자
	~Television() {
	}
	//Get, Set()
	int GetInch() {
		return inch;
	}
	void SetInch(int pInch) {
		inch = pInch;
	}
	int GetChannel() {
		return channel;
	}
	void SetChannel(int pChannel) {
		channel = pChannel;
	}
	int GetVolume() {
		return volume;
	}
	void SetVolume(int pVolume) {
		volume = pVolume;
	}
	//일반멤버함수
	void F_PrintClassName() {
		cout << "Class name = Television" << endl;
	}
};


class OLEDTV : public Television { //자식 클래스 
private:
	//기본적으로 부모의 멤버도 다 갖고 있고/ 자식클래스에 추가로 필요한 멤버들 선언
	int USB; //usp 포트 개수 
	bool HDMI; 
	bool DigitalCamera;

public:
	OLEDTV() : Television() { //생성자 - (1) _ 부모의 기본생성자를 지정 자식 생성자 선언
		USB = 5;
		HDMI = true;
		DigitalCamera = false;
	}
	OLEDTV(int pInch, int pChannel, int pVolume, int pUSB, bool pHDMI, bool pDigitalCamera) 
															: Television(pInch, pChannel, pVolume){ 
								//생성자 - (2) _부모의 생성자 지정하여 자식 생성자 선언 
		USB = pUSB;
		HDMI = pHDMI;
		DigitalCamera = pDigitalCamera;
	}
	//소멸자 
	~OLEDTV() {

	}
	//Get, set()
	int GetUSB() {
		return USB;
	}
	void SetUSB(int pUSB) {
		USB = pUSB;
	}
	bool GetHDMI() {
		return HDMI;
	}
	void SetHDMI(bool pHDMI) {
		HDMI = pHDMI;
	}
	bool GetDigitalCamera() {
		return DigitalCamera;
	}
	void SetDigitalCamera(bool pDigitalCamera) {
		DigitalCamera = pDigitalCamera;
	}

	//부모 멤버 함수 재정의(내용만 바뀜) 재정의하여 사용 
	//-> 이 경우 부모의 함수말고 자식이 재정의한 함수 내용만 출력됨 
	//@OverRide
	void F_PrintClassName() {
		cout << "Class name = OLEDTV" << endl;
	}
};






int main() {
	//부모클래스 객체 생성 
	Television SStv;
	Television LGtv(30, 20, 10);
	
	//자식클래스 객체 생성 
	OLEDTV SKtv; 
	OLEDTV LStv(50, 40, 30,     4, false, false);
	
	cout << "SStv "; //부모
	SStv.F_PrintClassName();

	cout << "LGtv";//부모
	LGtv.F_PrintClassName();

	cout << "SKtv";//자식객체
	SKtv.F_PrintClassName(); //재정의한 함수의 내용이 출력된다. 

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

 

728x90

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

C++_12주차_정리  (0) 2021.12.20
C++_11주차_정리  (0) 2021.12.20
C++_9주차_정리  (0) 2021.12.20
C++_8주차_정리  (0) 2021.12.20
C++_7주차_정리  (0) 2021.12.20