클래스 상속 ¶
상속이란?
객체지향 프로그래밍의 핵심적인 개념 가운데 하나.
기존의 클래스 위에서 새로운 클래스를 생성할 수 있는 능력을 가르킨다.
즉 어떤 클래스가 다른 클래스의 성질을 물려받는 것.
객체지향 프로그래밍의 핵심적인 개념 가운데 하나.
기존의 클래스 위에서 새로운 클래스를 생성할 수 있는 능력을 가르킨다.
즉 어떤 클래스가 다른 클래스의 성질을 물려받는 것.
예))
사람 - 이름, 나이, 살고있는곳,... (기본클래스)
직장인 - 직장명,월급... (서브클래스)
학생 - 학생ID,... (서브클래스)
직장인->사람<-학생
직장인 - 직장명,월급... (서브클래스)
학생 - 학생ID,... (서브클래스)
직장인-
예2)상속할 기본클래스 구축하기 ¶
~cpp #include<iostream.h> #include<string.h> #define MAX_LEN 81 class person{ protected: char fname[MAX_LEN]; char lname[MAX_LEN]; int age; public: void set_fname( char fn[] ) { strcpy(fname, fn); }; void set_lname( char ln[] ) { strcpy(lname, ln); }; void set_age( int a ) { age=a; }; char *get_name( char *fullname ); int get_age(void) {return age;}; person(char fn[] = "blank", char ln[] = "blank"); }; person::person( char fn[],char ln[] ) { strcpy(fname, fn); strcpy(lname, ln); age = -1; } char *person::get_name(char fullname[]) { strcpy(fullname, fname); strcat(fullname, " "); strcat(fullname, lname); return fullname; }
~cpp int main() { char full[MAX_LEN+MAX_LEN]; person cho("Cho", "JaeHwa"); cho.set_age(19); person blank; cout<<"\nperson cho : "<<cho.get_name(full); cout<<endl<<"age : "<<cho.get_age(); cout<<"\nperson blank : "<<blank.get_name(full); cout<<endl<<"age : "<<blank.get_age(); cout<<endl; return 0; }
private 대신 protected를 사용이유 ¶
private는 내부의 멤버함수에서만 엑세스가 가능, 즉 리스팅의 다른 부분에서는 데이터멤버나 값에 엑세스하는 것을 막는다.
하지만 상속하려면 private값을 이 기본 클래스에서 상속한 클래스에서 직접 엑세스 한는 것을 혀용하고 싶을 것이다.
이에 protected키워들를 사용해서 현재클래스와 상속하는 클래스에게만 엑세스를 허용한다.
하지만 상속하려면 private값을 이 기본 클래스에서 상속한 클래스에서 직접 엑세스 한는 것을 혀용하고 싶을 것이다.
이에 protected키워들를 사용해서 현재클래스와 상속하는 클래스에게만 엑세스를 허용한다.
예2-1) 서브 클래스 추가하기 ¶
~cpp class employee : public person{ protected: long salary; public: void set_salary( long sal ){ salary=sal; }; long get_salary(){return salary;}; employee(char fn[]="e_black",char ln[]="e_blank"); };
~cpp employee::employee( char fn[], char ln[]) :person(fn, ln) { salary = 0; }
~cpp employee park("Park","Ji-sung"); park.set_salary( 100000000); park.set_age(24); cout<<"\nEmployee park : "<< park.get_name(full); cout<<endl<<"age : "<<park.get_age(); cout<<endl<<"salary : "<<park.get_salary(); cout<<endl;