More actions
imported>Unknown No edit summary |
(Repair batch-0001 pages from live compare) |
||
| Line 6: | Line 6: | ||
즉 어떤 클래스가 다른 클래스의 성질을 물려받는 것. | 즉 어떤 클래스가 다른 클래스의 성질을 물려받는 것. | ||
Class.ppt | |||
예)) | 예)) | ||
| Line 26: | Line 26: | ||
class person{ | class person{ | ||
protected: | protected: | ||
char fname | char fname[MAX_LEN]; | ||
char lname | char lname[MAX_LEN]; | ||
int age; | int age; | ||
public: | public: | ||
void set_fname( char fn | void set_fname( char fn[] ) { strcpy(fname, fn); }; | ||
void set_lname( char ln | void set_lname( char ln[] ) { strcpy(lname, ln); }; | ||
void set_age( int a ) { age=a; }; | void set_age( int a ) { age=a; }; | ||
char *get_name( char *fullname ); | char *get_name( char *fullname ); | ||
int get_age(void) {return age;}; | int get_age(void) {return age;}; | ||
person(char fn | person(char fn[] = "blank", char ln[] = "blank"); | ||
}; | }; | ||
person::person( char fn | person::person( char fn[],char ln[] ) | ||
{ | { | ||
strcpy(fname, fn); | strcpy(fname, fn); | ||
| Line 45: | Line 45: | ||
} | } | ||
char *person::get_name(char fullname | char *person::get_name(char fullname[]) | ||
{ | { | ||
strcpy(fullname, fname); | strcpy(fullname, fname); | ||
| Line 58: | Line 58: | ||
int main() | int main() | ||
{ | { | ||
char full | char full[MAX_LEN+MAX_LEN]; | ||
person cho("Cho", "JaeHwa"); | person cho("Cho", "JaeHwa"); | ||
| Line 87: | Line 87: | ||
void set_salary( long sal ){ salary=sal; }; | void set_salary( long sal ){ salary=sal; }; | ||
long get_salary(){return salary;}; | long get_salary(){return salary;}; | ||
employee(char fn | employee(char fn[]="e_black",char ln[]="e_blank"); | ||
}; | }; | ||
employee::employee( char fn | employee::employee( char fn[], char ln[]) :person(fn, ln) | ||
{ | { | ||
salary = 0; | salary = 0; | ||
| Line 105: | Line 105: | ||
---- | ---- | ||
[[5인용C++스터디]] | [[5인용C++스터디]] | ||
Latest revision as of 23:55, 26 March 2026
클래스 상속
상속이란? 객체지향 프로그래밍의 핵심적인 개념 가운데 하나. 기존의 클래스 위에서 새로운 클래스를 생성할 수 있는 능력을 가르킨다. 즉 어떤 클래스가 다른 클래스의 성질을 물려받는 것.
Class.ppt
예))
사람 - 이름, 나이, 살고있는곳,... (기본클래스) 직장인 - 직장명,월급... (서브클래스) 학생 - 학생ID,... (서브클래스)
직장인--->사람<---학생
예2)상속할 기본클래스 구축하기
#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;
}
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키워들를 사용해서 현재클래스와 상속하는 클래스에게만 엑세스를 허용한다.
예2-1) 서브 클래스 추가하기
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");
};
employee::employee( char fn[], char ln[]) :person(fn, ln)
{
salary = 0;
}
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;