C++
상속 ~ 가상(virtual)
상속(Inheritance)
 A 클래스가 B 클래스를 상속하게 되면, A 클래스는 B 클래스가 지니고 있는 모든
멤버를 물려받는다.
 A 객체는 클래스에 선언 되어 있는 멤버 뿐만 아니라 B 클래스에 선언되어 있는
멤버도 존재하게 된다.
Class A : public
B
상속을 위한 조건
 IS-A 관계
 HAS-A 관계(보통은 복합 관계로 이를 대신)
객체 포인터 변수
 객체 포인터 변수
 객체의 주소 값을 저장하는 포인터 변수
해당 Person 객체 뿐만 아니라, Person을 상속하는 유도 클래스의 객체도 가리킬 수
있다.
Person * ptr;
ptr=new Person();
가상함수(Virtual Function)
 virtual 키워드 선언을 통해서 이뤄진다.
 해당 함수를 오버라이딩 하는 함수도 가상함수가 된다.
 해당 함수 호출시 포인터 변수가 실제로 가리키는 객체를 참조하여 호출 대상을
결정
순수 가상함수&추상 클래스
 순수 가상함수
 함수의 몸체가 정의되지 않은 함수
 0의 대입을 표시를 통해 알 수 있음.
 추상 클래스
 하나 이상의 멤버함수를 순수 가상함수로 선언한 클래스를 가리킴.
 객체 생성이 불가능한 클래스라는 의미를 지닌다.
다형성(Polymorphism)
 프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질
int main(void)
{
First *ptr=new First();
ptr->SimpleFunc();
delete ptr;
ptr=new Second();
ptr->SimpleFunc();
delete ptr;
return 0;
}
ptr이 참조하는 객체의 자료형이 다르기
때문에 실행결과는 다르게 나옴.
가상 소멸자(Virtual Destructor)
 다형성을 이용해서 만든 포인터를 소멸할 시, 소멸자가 virtual로 되어 있지 않으
면 부모 클래스의 소멸자가 호출 된다.
 Delete 연산자에 사용된 포인터 변수의 자료형에 상관 없이 모든 소멸자가 호출
되어야 한다.
class First{
public:
virtual ~First(){ … }
}
class Second: public First{
public:
virtual ~Second(){…}
}
class Third:public Second{
public:
virtual ~Third(){…}
}
int main(void)
{
First *ptr=new Third();
delete ptr;
}
virtual ~Third(){…}
virtual ~Second(){…}
virtual ~First(){…}
1
2
3
다중상속
 둘 이상의 클래스를 동시에 상속하는 것을 말한다.
class One{ public: void SimpleOne(){cout<<“One”<<endl;} };
class Two{ public : void SImpleTwo(){cout<<“Two”<<endl;} };
class Multi : public One, protected Two{
public:
void Complex(){ SimpleOne(); SimpleTwo(); }
};
int main(void){
Multi mul;
mul.Complex();
return 0;
}
One
Two
다중 상속의 모호성
 두 기초 클래스에 동일한 이름의 멤버가 존재하는 경우에는 문제가 발생할 수 있
다.
 유도 클래스 내에서 멤버의 이름만으로 접근이 불가능하기 때문.
 어느 클래스에 정의된 함수의 호출을 원하는지 명시를 통해 해결이 가능하다.
가상 상속(Virtual Inheritance)
 클래스의 상속 과정에서 같은 클래스가 두 번 이상 나타나 불필요한 자원이 소모
되는 것을 방지하기 위해 나온 것
 같은 클래스군에서 두 번 이상 나타나는 클래스를 가상으로 지정하면 상속 구조
에서 몇 번이 나오더라도 오직 한 번만 서브 객체를 생성하게 하는 것
Base
One Two
Three
One Two
Three
Base

More Related Content

PDF
Swift3 typecasting nested_type
PDF
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
PDF
Start IoT with JavaScript - 1.기초
PDF
Swift3 subscript inheritance initialization
PDF
Start IoT with JavaScript - 6.함수
PPTX
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
PPTX
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
PDF
일단 시작하는 코틀린
Swift3 typecasting nested_type
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
Start IoT with JavaScript - 1.기초
Swift3 subscript inheritance initialization
Start IoT with JavaScript - 6.함수
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
일단 시작하는 코틀린

What's hot (20)

PDF
Secrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
PPTX
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
PPTX
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
PDF
Swift3 generic
PPTX
파이썬+함수이해하기 20160229
PPTX
파이썬+함수 데코레이터+이해하기 20160229
PPTX
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
PPTX
골때리는 자바스크립트 발표자료
PDF
Realm.io for iOS
PPTX
프론트엔드스터디 E05 js closure oop
PPTX
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
PDF
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
PDF
Javascript 교육자료 pdf
DOCX
Javascript 완벽 가이드 정리
PPTX
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
PDF
7가지 동시성 모델 4장
PPTX
파이썬+Operator+이해하기 20160409
PDF
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
PPTX
파이썬+객체지향+이해하기 20160131
PPTX
Jupyter notebok tensorboard 실행하기_20160706
Secrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Swift3 generic
파이썬+함수이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
골때리는 자바스크립트 발표자료
Realm.io for iOS
프론트엔드스터디 E05 js closure oop
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
Javascript 교육자료 pdf
Javascript 완벽 가이드 정리
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
7가지 동시성 모델 4장
파이썬+Operator+이해하기 20160409
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
파이썬+객체지향+이해하기 20160131
Jupyter notebok tensorboard 실행하기_20160706
Ad

Similar to C++ inherit virtual (20)

PPT
Chapter8 상속과다형성(윤현성)
PPT
Chapter8 상속과다형성(윤현성)
PDF
5 6 1
PPTX
Effective c++ 정리 chapter 6
PPTX
Effective c++ 3
PPTX
Effective c++chapter1 and2
PPTX
More Effective C++ 4주차
PPTX
Effective c++(chapter 5,6)
PDF
Effective c++ chapter5 6_ 131039 신동찬
PPTX
이펙티브 C++ 5,6 장 스터디
PDF
상속과 다형성
PPTX
이펙티브 C++ 스터디
PDF
12장 상속 (고급)
PDF
1 2 1
PPTX
모어 이펙티브 c++ 5장 스터디
PDF
Effective c++ item40
PDF
13th chapter12 slide
PPTX
More effective c++ 3
PDF
The c++ programming language 10장 클래스 발표
PPTX
Effective c++ 챕터 2 정리
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
5 6 1
Effective c++ 정리 chapter 6
Effective c++ 3
Effective c++chapter1 and2
More Effective C++ 4주차
Effective c++(chapter 5,6)
Effective c++ chapter5 6_ 131039 신동찬
이펙티브 C++ 5,6 장 스터디
상속과 다형성
이펙티브 C++ 스터디
12장 상속 (고급)
1 2 1
모어 이펙티브 c++ 5장 스터디
Effective c++ item40
13th chapter12 slide
More effective c++ 3
The c++ programming language 10장 클래스 발표
Effective c++ 챕터 2 정리
Ad

C++ inherit virtual

  • 2. 상속(Inheritance)  A 클래스가 B 클래스를 상속하게 되면, A 클래스는 B 클래스가 지니고 있는 모든 멤버를 물려받는다.  A 객체는 클래스에 선언 되어 있는 멤버 뿐만 아니라 B 클래스에 선언되어 있는 멤버도 존재하게 된다. Class A : public B
  • 3. 상속을 위한 조건  IS-A 관계  HAS-A 관계(보통은 복합 관계로 이를 대신)
  • 4. 객체 포인터 변수  객체 포인터 변수  객체의 주소 값을 저장하는 포인터 변수 해당 Person 객체 뿐만 아니라, Person을 상속하는 유도 클래스의 객체도 가리킬 수 있다. Person * ptr; ptr=new Person();
  • 5. 가상함수(Virtual Function)  virtual 키워드 선언을 통해서 이뤄진다.  해당 함수를 오버라이딩 하는 함수도 가상함수가 된다.  해당 함수 호출시 포인터 변수가 실제로 가리키는 객체를 참조하여 호출 대상을 결정
  • 6. 순수 가상함수&추상 클래스  순수 가상함수  함수의 몸체가 정의되지 않은 함수  0의 대입을 표시를 통해 알 수 있음.  추상 클래스  하나 이상의 멤버함수를 순수 가상함수로 선언한 클래스를 가리킴.  객체 생성이 불가능한 클래스라는 의미를 지닌다.
  • 7. 다형성(Polymorphism)  프로그램 언어의 각 요소들이 다양한 자료형에 속하는 것이 허가되는 성질 int main(void) { First *ptr=new First(); ptr->SimpleFunc(); delete ptr; ptr=new Second(); ptr->SimpleFunc(); delete ptr; return 0; } ptr이 참조하는 객체의 자료형이 다르기 때문에 실행결과는 다르게 나옴.
  • 8. 가상 소멸자(Virtual Destructor)  다형성을 이용해서 만든 포인터를 소멸할 시, 소멸자가 virtual로 되어 있지 않으 면 부모 클래스의 소멸자가 호출 된다.  Delete 연산자에 사용된 포인터 변수의 자료형에 상관 없이 모든 소멸자가 호출 되어야 한다. class First{ public: virtual ~First(){ … } } class Second: public First{ public: virtual ~Second(){…} } class Third:public Second{ public: virtual ~Third(){…} } int main(void) { First *ptr=new Third(); delete ptr; } virtual ~Third(){…} virtual ~Second(){…} virtual ~First(){…} 1 2 3
  • 9. 다중상속  둘 이상의 클래스를 동시에 상속하는 것을 말한다. class One{ public: void SimpleOne(){cout<<“One”<<endl;} }; class Two{ public : void SImpleTwo(){cout<<“Two”<<endl;} }; class Multi : public One, protected Two{ public: void Complex(){ SimpleOne(); SimpleTwo(); } }; int main(void){ Multi mul; mul.Complex(); return 0; } One Two
  • 10. 다중 상속의 모호성  두 기초 클래스에 동일한 이름의 멤버가 존재하는 경우에는 문제가 발생할 수 있 다.  유도 클래스 내에서 멤버의 이름만으로 접근이 불가능하기 때문.  어느 클래스에 정의된 함수의 호출을 원하는지 명시를 통해 해결이 가능하다.
  • 11. 가상 상속(Virtual Inheritance)  클래스의 상속 과정에서 같은 클래스가 두 번 이상 나타나 불필요한 자원이 소모 되는 것을 방지하기 위해 나온 것  같은 클래스군에서 두 번 이상 나타나는 클래스를 가상으로 지정하면 상속 구조 에서 몇 번이 나오더라도 오직 한 번만 서브 객체를 생성하게 하는 것 Base One Two Three One Two Three Base

Editor's Notes

  • #4: 상속으로 묶인 두 개의 클래스는 강력한 연관성을 지닌다.