티스토리 뷰
* c++ 상속에는 3가지 상속이 있다.
1. private 상속
private란 자기 자신의 내부에서만 접근 할 수 접근지정자로 외부에서 접근 할 수가 없다. private로 자식에게 상속하면 어떤 접근지정자의 필드라도 자식에게 상속되는 순간 private로 넘어가게 된다. 거의 쓰지 않는 상속 방법이다.
2. protected 상속
protected란 자기 자신의 내부와 상속한 자식에게서만 접근 할 수 있다. protected 상속을 했을때, private로 상속을 넘기면 private로 상속 받고 protected와 public으로 상속을 넘기면 protected로 상속 받는다. has ~ a 관계로 상속된다.
3. public 상송
public이란 내부던 외부던 모두 접근이 가능한 공공 접근자다. public 으로 상속을 했을때, 어떤 접근 지정자로 넘기던 접근지정자 그대로 넘어간다. is ~ a 관계로 상속된다.
* public 으로 상속을 하는 코드를 작성해 보자. A 클래스를 B클래스에게 public 상속하고, B클래스를 C클래스에게 public 상속하라. main 에서 접근이 가능한건 직접 호출하고, 접근이 불가능한건 함수를 이용해서 호출하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 |
#include <iostream>
#include <iomanip>
using namespace std;
class A {
int a1 = 1;
protected:
int b1 = 2;
public:
int c1 = 3;
void seta1(int a1) {this->a1 = a1;}
int geta1() {return a1;}
void setb1(int b1) {this->b1 = b1;}
int getb1() {return b1;}
};
class B :public A {
int a2 = 4;
protected:
int b2 = 5;
public:
int c2 = 6;
void seta2(int a2) {this->a2 = a2;}
int geta2() {return a2;}
void setb2(int b2) {this->b2 = b2;}
int getb2() {return b2;}
};
class C :public B {
int a3 = 7;
protected:
int b3 = 8;
public:
int c3 = 9;
void seta3(int a3) {this->a3 = a3;}
int geta3() {return a3;}
void setb3(int b3) {this->b3 = b3;}
int getb3() {return b3;}
};
void main() {
C cc;
//직접 접근 가능한거 직접표현
//접근 불가능 함수로 표현
cout << cc.geta1() << endl;
cout << cc.getb1() << endl;
cout << cc.c1 << endl;
cout << cc.geta2() << endl;
cout << cc.getb2() << endl;
cout << cc.c2 << endl;
cout << cc.geta3() << endl;
cout << cc.getb3() << endl;
cout << cc.c3 << endl;
} |
cs |
* protected 로 상속을 하는 코드를 작성해 보자. A 클래스를 B클래스에게 protected 상속하고, B클래스를 C클래스에게 protected 상속하라. main 에서 접근이 가능한건 직접 호출하고, 접근이 불가능한건 함수를 이용해서 호출하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 |
#include <iostream>
#include <iomanip>
using namespace std;
class A {
int a1=1;
protected:
int b1=2;
public:
int c1=3;
void seta1(int a1) {this->a1 = a1;}
int geta1() const{return a1;}
void setb1(int b1) {this->b1 = b1;}
int getb1() const{return b1;}
void setc1(int c1) {this->c1 = c1;}
int getc1() const{return c1;}
};
class B :protected A {
A aa;
int a2=4;
protected:
int b2=5;
public:
int c2=6;
void seta2(int a2) {this->a2 = a2;}
int geta2() const{return a2;}
void setb2(int b2) {this->b2 = b2;}
int getb2() const{return b2;}
void setc2(int c2) {this->c2 = c2;}
int getc2() const{return c2;}
};
class C :protected B{
//오버라이드 쓸때는 부모와 자식이 똑같아야함
int a3=7;
protected:
int b3=8;
public:
int c3=9;
void seta1(int a1) { A::seta1(a1); }//A꺼에 a1을 불러줘
int geta1() const{ return A::geta1(); }
void setb1(int b1) { A::setb1(b1); }
int getb1() const { return A::getb1(); }
void setc1(int c1) { A::setc1(c1); }
int getc1() const { return A::getc1(); }
void seta2(int a2) { B::seta2(a2); }
int geta2()const { return B::geta2();}
void setb2(int b2) { B::setb2(b2); }
int getb2() const{ return B::getb2();}
void setc2(int c2) { B::setc2(c2); }
int getc2() const{ return B::getc2();}
void seta3(int a3) { this->a3 = a3; }
int geta3() {return a3;}
void setb3(int b3) {this->b3 = b3;}
int getb3() {return b3;}
};
void main(){
C cc;
//직접 접근 가능한거 직접표현
//접근 불가능한거 함수로 표현
cout << cc.geta1() << endl;
cout << cc.getb1() << endl;
cout << cc.getc1() << endl;
cout << cc.geta2() << endl;
cout << cc.getb2() << endl;
cout << cc.getc2() << endl;
cout << cc.geta3() << endl;
cout << cc.getb3() << endl;
cout << cc.c3 << endl;
} |
cs |
'Programming > C++' 카테고리의 다른 글
[c++]가상상속(virtual) (1) | 2018.03.13 |
---|---|
[c++]상속 및 has~a관계를 이용한 급여관리프로그램 (0) | 2018.03.12 |
[c++]has~a 관계를 이용한 사람수 제한없는 성적프로그램 (0) | 2018.03.08 |
[c++]const (0) | 2018.03.08 |
[c++]소멸자함수 (2) | 2018.03.07 |