출처 : https://koocci.github.io/c++/2016/11/17/C++_16.html
상속 - 부모꺼를 자식이 물려받음 -> 자식은 자식꺼 + 부모꺼 사용가능
자식 클래스의 생성자는 자신이 상속한 부모클래스의 맴버를 초기화해야함 -> 부모클래스를 호출하는 방식으로(이니셜라이져사용)
*자식 클래스 객체생성과정은 부모클래스를 무조건 호출!! 명시하지 않으면 부모클래스의 void 생성자 호출
자식 클래스 객체가 소멸될 떄, 자식 클래스 소멸자 실행 후 부모클래스 소멸자 실행
접근 제한자에서의 상속은 해당 접근 제한자보다 넓은 것들을 지정한 걸로 바꿈
Ex) Class 자식 : private 부모 -> private보다 넓은 맴버는 private로변경 -> 다른 클래스가 솔찍히 접근할 수 없다. (거이 안씀)
상속 : IS-A 관계성립 -> 무선 전화기는 일종의 전화기이다. 무선전화기 is a 전화기
객체 포인터 변수 : 객체의 주소값을 저장하는 포인터 변수
Person* ptr;
pt = new Person();
-> Persin형 포인터(ptr) 은 Person객체 뿐 아니라 Person을 상속하는 자식 클래스의 객체도 가리킬수 있다 (중요)
C++에서, AAA형 포인터 변수는 AAA 객체 또는 AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다.(객체의 주소 값을 저장할 수 있다)
Ptr1과 Ptr2는 Person객체로 간주하기 떄문에 Person클래스의 함수만 호출가능
Ptr3은 Student객체로 간주하기 떄문에 Student클래스의 study함수와 student클래스가 상속받는 Person 클래스의 함수 사용가능
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 | #include <iostream> #include <cstring> using namespace std; class Person { public: void Sleep() const { cout << "Sleep" << endl; } }; class Student : public Person { public: void Study() const { cout << "Study" << endl; } }; class PartTimeStudent : public Student { public: void Work() const { cout << "Work" << endl; } }; int main(void) { Person* ptr1 = new Student(); //학생은 사람이다. Person* ptr2 = new PartTimeStudent(); // 알바학생은 사람이다. Student* ptr3 = new PartTimeStudent(); // 알바학생은 학생이다. // Student 객체와 ParttimeStudent 객체를 Person객체로 간주 , Parttimestudent객체를 student객체로 간주 ptr1->Sleep(); ptr2->Sleep(); ptr3->Study(); delete ptr1; delete ptr2; delete ptr3; return 0; } | cs |
'C , C++, C#' 카테고리의 다른 글
C++ 가상함수 이해정리 (0) | 2019.03.06 |
---|---|
C++ 함수 오버라이딩 간단정리 (0) | 2019.03.06 |
[자료구조] 링크드 리스트(C++) (0) | 2019.02.20 |
[자료구조]링크드리스트 삽입 삭제 (C언어) (0) | 2019.02.20 |
[자료구조] C/C++ 단일 링크드리스트 (0) | 2019.02.19 |