SlideShare a Scribd company logo
1 of 11
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

What's hot

Secrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
Secrets of the JavaScript Ninja - Chapter 3. Functions are FundamentalSecrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
Secrets of the JavaScript Ninja - Chapter 3. Functions are FundamentalHyuncheol Jeon
 
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow
[새차원, 코틀린(Kotlin) 강좌] 5. Control Flow정연 최
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeYoung-Beom Rhee
 
Swift3 generic
Swift3 genericSwift3 generic
Swift3 genericEunjoo Im
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229Yong Joon Moon
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료욱진 양
 
Realm.io for iOS
Realm.io for iOSRealm.io for iOS
Realm.io for iOSEunjoo Im
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oopYoung-Beom Rhee
 
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 [GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용
[GPG 스터디] 1.4 게임프로그래밍에서의 STL 활용 Sehyeon Nam
 
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)
C프로그래머를 위한 Java 기초 입문 (Java1.5 기준)혜웅 박
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리ETRIBE_STG
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍Young-Beom Rhee
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitiveNAVER D2
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Yong Joon Moon
 

What's hot (20)

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

Similar to C++ inherit virtual

Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)문익 장
 
Effective c++ Chapter6
Effective c++ Chapter6Effective c++ Chapter6
Effective c++ Chapter6세빈 정
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Leonardo YongUk Kim
 
[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_databaseNAVER D2
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장Software in Life
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나Astin Choi
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)유석 남
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
Smalltalk at Altlang 2008
Smalltalk at Altlang 2008Smalltalk at Altlang 2008
Smalltalk at Altlang 2008daliot
 
Week12 chapter11
Week12 chapter11 Week12 chapter11
Week12 chapter11 웅식 전
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩해강
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy송미 이
 

Similar to C++ inherit virtual (18)

Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)
 
Effective c++ Chapter6
Effective c++ Chapter6Effective c++ Chapter6
Effective c++ Chapter6
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
 
강의자료3
강의자료3강의자료3
강의자료3
 
[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database[113]how can realm_make_efficient_mobile_database
[113]how can realm_make_efficient_mobile_database
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
강의자료4
강의자료4강의자료4
강의자료4
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Smalltalk at Altlang 2008
Smalltalk at Altlang 2008Smalltalk at Altlang 2008
Smalltalk at Altlang 2008
 
Week12 chapter11
Week12 chapter11 Week12 chapter11
Week12 chapter11
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy
 

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

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