티스토리 뷰

공부 이야기

[C] 가상 클래스 구성

판다(panda) 2009. 1. 30. 00:00

#include "stdafx.h"
#include <stdio.h>

class
A
{
public:
    A() { printf("A 오브젝트 생성\n"); }       // 생성자
    ~A() { printf("A 오브젝트 소멸\n"); }     // 소멸자
    void foo() { printf("A->foo()\n"); }
};

class B : public A        // B 클래스는 A 클래스를 상속
{
public:
    B() { printf("B 오브젝트 생성\n"); }
    ~B() { printf("B 오브젝트 소멸\n"); }
    void foo() { printf("B->foo()\n"); }       // A 클래스를 상속
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;              // 클래스 A 오브젝트 생성 ( 생성자 호출 )
    B b;              // 클래스 B 오브젝트 생성 ( 생성자 호출 )
    A *p;             // 클래스 A의 포인터 변수 ( 생성자 호출 안함 )

// 클래스 A를 B로 바꾸면 컴파일 에러 error C2440
// B라는 오브젝트는 A 오브젝트이다.
// A오브젝트는 B오브젝터가 아니다.


    a.foo();              // 클래스 A의 foo() 함수 호출
    b.foo();              // 클래스 B의 foo() 함수 호출
    p = &a;               // 클래스 A 오브젝트의 포인터
    p->foo();
    p = &b;               // 클래스 B 오브젝트의 포인터
    p->foo();            // 가상함수가 아니면 외적 상속받은 클래스 A를 호출
    return 0;
}

실행 결과..



이 소스를 가지고 가상 클래스를 구성하겠습니다.

// 가상 클래스(virtual)