C++ 오버라이딩

가상함수

  • 가상함수는 기본(부모) 클래스 내에서 정의된 멤버함수를 파생(자식) 클래스에서 재정의하고자 할 때 사용한다.
  • 기본 클래스의 멤버함수와 같은 이름의 함수를 파생 클래스에서 재정의하여 사용한다.
  • 파생 클래스 내에서 가상함수의 재정의는 함수 중첩 기능과 비슷하지만 파생 클래스에서 재정의되는 가상함수는 기본 클래스와 함수의 리턴값, 매개변수 개수, 형이 완전히 같아야 한다.
  • 가상함수의 구현을 중복(overriding)이라 한다.

바인딩

정적 바인딩과 동적 바인딩이 있며 차이는 메모리 할당이나 함수호출이 발생할때 언제 결정 되는가? 의 차이이다. 컴파일시 결정되면 정적, 실행시 결정되면 동적이다.

정적 바인딩

static 을 사용해 정적 변수를 반들 수 있으며, 객체 내에서 작성할 경우 모든 객체가 공유하는 멤버 면수로서 사용된다.

사용법

#include <iostream>
using std::cout;
class Dot
{
public:
    virtual void draw(){ cout<<"Dot::draw()\n";}
    void print(){
        cout<<"Dot 클래스\n";
        draw();
	}
};
class Line:public Dot
{
    public:
    void draw(){cout<<"Line::draw()\n";}
};
int main()
{
    Line line;
    line.print();
    return 0;
}

주의할것은 오버라이딩을 하는 함수(자식 클래스의 함수)앞에 overriding 키워드를 붙여 컴파일러에게 이 함수가 오버라이딩을 한다는걸 알려줄 수 있다. 오류를 더 정확하게 해주는 장점이 있지만, 필수가 아니다

#include <iostream>
 using std::cout;
 class Point{
 int x;
 int y;
 static int count; //선언
 public:
 Point(){cout<<++count;}
 ~Point(){cout<<--count;}
 };
int Point::count=0; //정의
 int main()
{
Point p1,p2,p3;
return 0;
}