검색결과 리스트
글
가상 함수 (virtual function)
- 기본 클래스에 선언된 함수를 파생 클래스에서 재정의한 상속(:) 관계함수(상속 관계)
-> 상위에 있는 것을 무시하고 하위 것을 하위 클래스에 있는 함수을 실행하고자 할때
- 오버라이딩(overriding)이라고 함
- 상위 클래스의 멤버 함수를 무시
- 상위 클래스와 멤버 함수의 매개변수는 같아야 한다.
- 리턴값은 상관없음.
형식
함수 앞에 virtual 이라는 이름을 붙여준다.
virtual void Print(){ cout<<"A"<<endl }
접근방법은 *포인터와 &참조자 형태로 접근하는 방법이 있다.
아래 예제를 참고 한다.
예제
#include <iostream>
using namespace std;
class A
{
public:
virtual void Print() {cout <<"A"<<endl;}
};
class B : public A // A 상속
{
public:
void Print() { cout <<"B"<<endl; }
};
int main()
{
B ClassB; //obj 생성
//포인터형
A * pClassA= &ClassB; //포인터형 obj 생성
pClassA->Print(); //B 을 출력
//참조자형
A & ClassRefA=ClassB; //참조자형 obj생성(선언과 동시에 초기화, A 클래스의 별명 B 클래스)
ClassRefA.Print(); //B 을 출력
return 0;
}
다형성( polymorphism )
- 상위 클래스의 가상 함수가 하위 클래스의 종류와 상관없이 재정의 되어 실행되는 특성
예제
#include <iostream>
using namespace std;
class A
{
public:
virtual void Print(){ cout <<"A"<<endl; }
};
class B : public A
{
public:
void Print() { cout <<"B"<<endl; }
};
class C : public A
{
public:
void Print() { cout <<"C"<<endl; }
};
int main()
{
B ClassB;
C ClassC;
//포인터형
A * pClassA= &ClassB;
pClassA->Print();
pClassA=&ClassC;
pClassA->Print();
//참조자형
A & ClassRefA=ClassB;
ClassRefA.Print();
return 0;
}
가상 기본 클래스(virtual base class)
- 다중 상속에서 기본 클래스가 한번만 생성되게 하기 위한 상속
- 기본 클래스는 공유가 목적
- 상속 접근 지정자 앞에 virtual을 붙임
형식
class A {};
class B: virtual public A
{ };
class C: virtual public A
{ };
class D: public B, public C
{ };
'…™업무일지。 > …™C++。' 카테고리의 다른 글
가상시리얼포트 (0) | 2014.10.17 |
---|---|
※생성자(Constructor) 및 오버로딩(Overloading) (0) | 2014.10.16 |
상속(Inheritance)의 이해 (0) | 2014.10.15 |
※const static 멤버 (0) | 2014.10.15 |
※인라인(inline) 함수 -작업중- (0) | 2014.10.15 |
RECENT COMMENT