virtual(가상함수) 키워드를 이용하여 가상함수를 생성하면
1. Run-Time 시에 동적으로 해당 클래스에 바인딩 되며
2. 개체 생성시에 에러 발생함

pure-virtual(순수가상함수)는 상속시
1. 강제적으로 () 상속받는 하위 클래스에서 구현해야 한다.
2. 상속받는 하위 클래스에서 구현하지 않으면 에러가 발생한다.
3. 순수가상함수가 포함된 클래스의 인스턴스(객체)를 생성할 수 없다.
4. main 함수에서 순수가상함수를 포함한 클래스를 생성(정의)하지 않으면
순수가상함수가 하위 클래스에서 구현되어 있지 않아도 에러가 발생하지 않는다.

virtual Func() = 0; (순수 가상 함수 할당하는 방법)

///////////////////////////////////////////////////////////////////////

가상함수는 virtual 키워드를 앞에다 붙여서 선언하는 함수이며,
부모객체의 포인터로 자식개체의 함수를 불러올 수 있게 해줍니다.
보통의 멤버함수는 자식 클래스에서 오버라이딩을 하더라도
부모 객체의 포인터에서 호출하면 부모클래스의 함수가 호출되게 됩니다.
가상함수는 자식클래스가 오버로딩을 한 경우 자식클래스의 함수가 불려집니다.

///////////////////////////////////////////////////////////////////////

순수가상함수는 함수의 원형만 있고 구현은 없는 가상함수를 말합니다.
virtual int myclassfunc(int a, int b) = 0; 처럼 함수 원형에 "= 0"을 붙여서 만듭니다.
그리고 순수가상함수를 가진 클래스를 추상클래스라고 합니다.
추상클래스는 순수가상함수 때문에 객체를 만들 수 없습니다.

///////////////////////////////////////////////////////////////////////
   
#include <iostream>
using namespace std;

class B
{
public :
  virtual foo(int a)
  {
    cout << "B inside int " << a << endl;
  }
  virtual foo(double a)
  {
    cout << "B inside double " << a << endl;
  }
};

class D : public B
{
public:
  foo(int a)
  {
    cout << "D inside int " << a << endl;
  }
};

int main(int argc, char **argv)
{
  D d;
  B b, *pb = &d;
 
  b.foo(9);  // B inside int 9
  b.foo(9.5);  // B inside double 9.5
 
  d.foo(9);  // D inside int 9
  d.foo(9.5);  // D inside int 9
 
  pb->foo(9);  // D inside int 9
  pb->foo(9.5); // B inside double 9.5
 
  return 0;
} 
 
2006/05/13 23:33 2006/05/13 23:33

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요

  1. iTnrain 2009/06/09 16:41 고유주소 고치기 답하기

    블로그로 담아갑니다. 감사합니다 :)

  2. Taessing 2010/07/23 17:08 고유주소 고치기 답하기

    블로그에 담아갈게요. 좋은 내용 감사합니다.^^

  3. 금도리 2014/08/19 10:47 고유주소 고치기 답하기

    블로그에 담아갈께요~~ 감사합니다.