001 002 003 004 005 006 007 008

  • Slides: 29
Download presentation

(예) 중복 멤버의 처리 : 다계층 상속 /*001*/ /*002*/ /*003*/ /*004*/ /*005*/ /*006*/ /*007*/

(예) 중복 멤버의 처리 : 다계층 상속 /*001*/ /*002*/ /*003*/ /*004*/ /*005*/ /*006*/ /*007*/ /*008*/ /*009*/ /*010*/ /*011*/ /*012*/ /*013*/ /*014*/ /*015*/ /*016*/ /*017*/ /*018*/ SQ Lab. // overloading. Member 01 c. Ncpp #include "iostream" using namespace std; class. G { protected : int y; public : int z; }; class. P : public class. G { protected : int y; public : int z; }; class. C : public class. P { private : int x; protected : int y; 3

/*019*/ /*020*/ /*021*/ /*022*/ /*023*/ /*024*/ /*025*/ /*026*/ /*027*/ /*028*/ /*029*/ /*030*/ /*031*/ /*032*/

/*019*/ /*020*/ /*021*/ /*022*/ /*023*/ /*024*/ /*025*/ /*026*/ /*027*/ /*028*/ /*029*/ /*030*/ /*031*/ /*032*/ /*033*/ /*034*/ /*035*/ /*036*/ /*037*/ /*038*/ /*039*/ SQ Lab. public : int z; class. C() { x = 1; y = 2; z = 3; class. P: : y = 4; class. P: : z = 5; class. G: : y = 6; class. G: : z = 7; } void adder(int cp=0, int pp=0, int gp=0) { x = x + cp; y = y + cp; z = z + cp; class. P: : y = class. P: : y + pp; class. P: : z = class. P: : z + pp; class. G: : y = class. G: : y + gp; class. G: : z = class. G: : z + gp; }; 4

/*040*/ void cout. Member. Data() /*041*/ { /*042*/ cout << "₩n x=>" << x

/*040*/ void cout. Member. Data() /*041*/ { /*042*/ cout << "₩n x=>" << x /*043*/ << "₩n y=>" << y /*044*/ << "₩n z=>" << z; /*045*/ cout << "₩n₩n class. P: : y=>" << class. P: : y /*046*/ << "₩n class. P: : z=>" << class. P: : z; /*047*/ cout << "₩n₩n class. G: : y==>" << class. G: : y /*048*/ << "₩n class. G: : z==>" << class. G: : z; /*049*/ } /*050*/ }; /*051*/ /*052*/ void main() /*053*/ { /*054*/ class. C Cobject; /*055*/ /*056*/ Cobject. adder(10, 20, 30); /*057*/ Cobject. cout. Member. Data(); /*058*/ cout << "₩n₩n--------------₩n"; /*059*/ SQ Lab. 5

/*060*/ /*061*/ /*062*/ /*063*/ /*064*/ /*065*/ /*066*/ /*067*/ /*068*/ /*069*/ } SQ Lab. Cobject.

/*060*/ /*061*/ /*062*/ /*063*/ /*064*/ /*065*/ /*066*/ /*067*/ /*068*/ /*069*/ } SQ Lab. Cobject. z = 77; Cobject. class. P: : z = 88; Cobject. class. G: : z = 99; cout << "₩n Cobject. z=>" << Cobject. z; cout << "₩n Cobject. class. P: : z=>" << Cobject. class. P: : z; cout << "₩n Cobject. class. G: : z=>" << Cobject. class. G: : z; cout << "₩n₩n₩n Type any character : "; cin. get(); 6

/*054*/ class. C Cobject; class. C형태의 객체 Cobject를 생성한다. /*060*/ Cobject. z = 77;

/*054*/ class. C Cobject; class. C형태의 객체 Cobject를 생성한다. /*060*/ Cobject. z = 77; Cobject의 자신의 고유 멤버 z에 77을 수록한다. /*061*/ Cobject. class. P: : z = 88; Cobject의 class. P로부터 상속된 멤버 z에 88을 수록한다. /*062*/ Cobject. class. G: : z = 99; Cobject의 class. G로부터 상속된 멤버 z에 99를 수록한다. /*063*/ cout << "₩n Cobject. z=>" << Cobject. z; Cobject의 자신의 고유 멤버 z 값을 화면에 나타낸다. /*064*/ cout << "₩n Cobject. class. P: : z=>" << Cobject. class. P: : z; Cobject의 class. P로부터 상속된 멤버 z 값을 화면에 나타낸다. /*065*/ cout << "₩n Cobject. class. G: : z=>" << Cobject. class. G: : z; Cobject의 class. G로부터 상속된 멤버 z 값을 화면에 나타낸다. SQ Lab. 10

(예) 중복 명칭 : 다중 부모 상속 /*001*/ /*002*/ /*003*/ /*004*/ /*005*/ /*006*/ /*007*/

(예) 중복 명칭 : 다중 부모 상속 /*001*/ /*002*/ /*003*/ /*004*/ /*005*/ /*006*/ /*007*/ /*008*/ /*009*/ /*010*/ /*011*/ /*012*/ /*013*/ /*014*/ /*015*/ /*016*/ SQ Lab. // overloading. Member 02 c. Ncpp #include "iostream" using namespace std; class. F { protected : int y; public : int z; }; class. M { protected : int y; public : int z; }; 11

/*017*/ class. C : public class. F, public class. M /*018*/ { /*019*/ private

/*017*/ class. C : public class. F, public class. M /*018*/ { /*019*/ private : int x; /*020*/ protected : int y; /*021*/ public : int z; /*022*/ /*023*/ class. C() /*024*/ { /*025*/ x = 1; /*026*/ y = 2; /*027*/ z = 3; /*028*/ class. F: : y = 4; /*029*/ class. F: : z = 5; /*030*/ class. M: : y = 6; /*031*/ class. M: : z = 7; /*032*/ } SQ Lab. 12

/*033*/ void adder(int cp=0, int fp=0, int mp=0) /*034*/ { /*035*/ x = x

/*033*/ void adder(int cp=0, int fp=0, int mp=0) /*034*/ { /*035*/ x = x + cp; /*036*/ y = y + cp; /*037*/ z = z + cp; /*038*/ class. F: : y = class. F: : y + fp; /*039*/ class. F: : z = class. F: : z + fp; /*040*/ class. M: : y = class. M: : y + mp; /*041*/ class. M: : z = class. M: : z + mp; /*042*/ }; /*043*/ void cout. Member. Data() /*044*/ { /*045*/ cout << "₩n x=>" << x /*046*/ << "₩n y=>" << y /*047*/ << "₩n z=>" << z; /*048*/ cout << "₩n₩n class. F: : y=>" << class. F: : y /*049*/ << "₩n class. F: : z=>" << class. F: : z; /*050*/ cout << "₩n₩n class. M: : y=>" << class. M: : y /*051*/ << "₩n class. M: : z=>" << class. M: : z; /*052*/ } /*053*/ }; SQ Lab. 13

/*054*/ /*055*/ /*056*/ /*057*/ /*058*/ /*059*/ /*060*/ /*061*/ /*062*/ /*063*/ /*064*/ /*065*/ /*066*/ /*067*/

/*054*/ /*055*/ /*056*/ /*057*/ /*058*/ /*059*/ /*060*/ /*061*/ /*062*/ /*063*/ /*064*/ /*065*/ /*066*/ /*067*/ /*068*/ /*069*/ /*070*/ /*071*/ /*072*/ SQ Lab. void main() { class. C Cobject; Cobject. adder(10, 20, 30); Cobject. cout. Member. Data(); cout <<" ₩n₩n--------------₩n"; Cobject. z = 111; Cobject. class. F: : z = 333; Cobject. class. M: : z = 555; cout << "₩n Cobject. z=>" << Cobject. z; cout << "₩n Cobject. class. F: : z=>" << Cobject. class. F: : z; cout << "₩n Cobject. class. M: : z=>" << Cobject. class. M: : z; cout << "₩n₩n₩n ype any character : "; cin. get(); } 14

/*056*/ class. C Cobject; class. C형태의 객체 Cobject를 생성한다. /*062*/ Cobject. z = 111;

/*056*/ class. C Cobject; class. C형태의 객체 Cobject를 생성한다. /*062*/ Cobject. z = 111; Cobject의 자신의 고유 멤버 z에 111을 수록한다. /*063*/ Cobject. class. F: : z = 333; Cobject의 class. F로부터 상속된 멤버 z에 333을 수록한다. /*064*/ Cobject. class. M: : z = 555; Cobject의 class. M으로부터 상속된 멤버 z에 555를 수록한다. /*066*/ cout << "₩n Cobject. z=>" << Cobject. z; Cobject의 자신의 고유 멤버 z 값을 화면에 나타낸다. /*067*/ cout << "₩n Cobject. class. F: : z=>" << Cobject. class. F: : z; Cobject의 class. F로부터 상속된 멤버 z 값을 화면에 나타낸다. /*068*/ cout << "₩n Cobject. class. M: : z=>" << Cobject. class. M: : z; Cobject의 class. M으로부터 상속된 멤버 z 값을 화면에 나타낸다. SQ Lab. 17

(예) 중복 명칭 : 다중 부모 상속 /*001*/ /*002*/ /*003*/ /*004*/ /*005*/ /*006*/ /*007*/

(예) 중복 명칭 : 다중 부모 상속 /*001*/ /*002*/ /*003*/ /*004*/ /*005*/ /*006*/ /*007*/ /*008*/ /*009*/ /*010*/ /*011*/ /*012*/ /*013*/ /*014*/ /*015*/ /*016*/ /*017*/ /*018*/ /*019*/ SQ Lab. // overloading. Member. Virtual 01 c. Ncpp #include "iostream" using namespace std; class. G { public : int gx; }; class. F : virtual public class. G { public: int x; }; class. M : virtual public class. G { public: int x; }; class. C : public class. F, public class. M { public: int x; 19

/*020*/ /*021*/ /*022*/ /*023*/ /*024*/ /*025*/ /*026*/ /*027*/ /*028*/ /*029*/ /*030*/ /*031*/ /*032*/ /*033*/

/*020*/ /*021*/ /*022*/ /*023*/ /*024*/ /*025*/ /*026*/ /*027*/ /*028*/ /*029*/ /*030*/ /*031*/ /*032*/ /*033*/ /*034*/ /*035*/ /*036*/ /*037*/ /*038*/ /*039*/ /*040*/ }; SQ Lab. class. C() { x = 1; class. F: : x = 3; class. M: : x = 5; gx = 7; } void adder(int cp=0, int fp=0, int { x = x + cp; class. F: : x = class. F: : x + fp; class. M: : x = class. M: : x + mp; gx = gx + gp; }; void cout. Member. Data() { cout << "₩n gx=====>" << << "₩n class. F: : gx=>" << "₩n class. M: : gx=>" } mp=0, int gp=0) gx << class. F: : gx << class. M: : gx; 20

/*041*/ void main() /*042*/ { /*043*/ class. C Cobject; /*044*/ /*045*/ Cobject. adder(10, 30,

/*041*/ void main() /*042*/ { /*043*/ class. C Cobject; /*044*/ /*045*/ Cobject. adder(10, 30, 50, 70); /*046*/ Cobject. cout. Member. Data(); /*047*/ cout << "₩n₩n--------------₩n"; /*048*/ /*049*/ Cobject. gx = 99; /*050*/ cout << "₩n Cobject. gx=====>" << Cobject. gx; /*051*/ cout << "₩n Cobject. class. F: : gx=>" << Cobject. class. F: : gx; /*052*/ cout << "₩n Cobject. class. M: : gx=>" << Cobject. class. M: : gx; /*053*/ /*054*/ cout << "₩n₩n₩n Type any character : "; /*055*/ cin. get(); /*056*/ } SQ Lab. 21

/*043*/ class. C Cobject; class. C형태의 객체 Cobject를 생성한다. /*049*/ Cobject. gx = 99;

/*043*/ class. C Cobject; class. C형태의 객체 Cobject를 생성한다. /*049*/ Cobject. gx = 99; Cobject의 gx에 99를 수록한다. /*050*/ cout << "₩n Cobject. gx=====>" << Cobject. gx; /*051*/ cout << "₩n Cobject. class. F: : gx=>" << Cobject. class. F: : gx; /*052*/ cout << "₩n Cobject. class. M: : gx=>" << Cobject. class. M: : gx; Cobject의 gx, class. F: : gx, class. M: : gx는 모두 동일한 멤버를 지적한다. SQ Lab. 25

[실습문제] [실습문제 1] 다계층 및 다중 부모 다음 프로그램을 해석하여 화면의 출력 결과를 나타내시오.

[실습문제] [실습문제 1] 다계층 및 다중 부모 다음 프로그램을 해석하여 화면의 출력 결과를 나타내시오. /*001*/ /*002*/ /*003*/ /*004*/ /*005*/ /*006*/ /*007*/ /*008*/ /*009*/ /*010*/ /*011*/ /*012*/ SQ Lab. // practice 1301 c. Ncpp #include "iostream" using namespace std; class. G { public: int gx; }; class. F : public class. G { public: int x; }; 26

/*013*/ /*014*/ /*015*/ /*016*/ /*017*/ /*018*/ /*019*/ /*020*/ /*021*/ /*022*/ /*023*/ /*024*/ /*025*/ /*026*/

/*013*/ /*014*/ /*015*/ /*016*/ /*017*/ /*018*/ /*019*/ /*020*/ /*021*/ /*022*/ /*023*/ /*024*/ /*025*/ /*026*/ /*027*/ /*028*/ /*029*/ /*030*/ /*031*/ /*032*/ /*033*/ /*034*/ /*035*/ SQ Lab. class. M : public class. G { public : int x; }; class. C : public class. F, public class. M { public : int x; class. C() { x = 1; class. F: : x = 3; class. M: : x = 5; class. F: : gx = 7; class. M: : gx = 9; } void adder(int cp=0, int fp=0, int mp=0, int gp=0) { x = x + cp; class. F: : x = class. F: : x + fp; class. M: : x = class. M: : x + mp; class. F: : gx = class. F: : gx + gp; class. M: : gx = class. M: : gx + gp; }; 27

/*036*/ void cout. Member. Data() /*037*/ { /*038*/ cout << "₩n x=====>" << x

/*036*/ void cout. Member. Data() /*037*/ { /*038*/ cout << "₩n x=====>" << x /*039*/ << "₩n class. F: : x==>" << class. F: : x /*040*/ << "₩n class. M: : x==>" << class. M: : x /*041*/ << "₩n class. F: : gx=>" << class. F: : gx /*042*/ << "₩n class. M: : gx=>" << class. M: : gx; /*043*/ } /*044*/ }; /*045*/ void main() /*046*/ { /*047*/ class. C Cobject; /*048*/ /*049*/ Cobject. adder(10, 30, 50, 70); /*050*/ Cobject. cout. Member. Data(); /*051*/ cout << "₩n₩n---------------₩n"; /*052*/ /*053*/ Cobject. class. F: : gx = 111; /*054*/ Cobject. class. M: : gx = 333; /*055*/ cout << "₩n Cobject. class. F: : gx=>" << Cobject. class. F: : gx; /*056*/ cout << "₩n Cobject. class. M: : gx=>" << Cobject. class. M: : gx; /*057*/ SQ Lab. 28

/*058*/ cout << "₩n₩n₩n Type any character : "; /*059*/ cin. get(); /*060*/ }

/*058*/ cout << "₩n₩n₩n Type any character : "; /*059*/ cin. get(); /*060*/ } SQ Lab. 29