-
메서드 오버라이딩의 특수한 경우들(1)@ 16. 1 ~ 17. 1/C++ 2014. 3. 3. 23:04
부모클래스의 메서드가 static인 경우
c++에서는 static메서드를 오버라이딩할 수 없다. 보통 이 사실만 기억하면되지만..
자식클래스에서 부모클래스에 있는 static메서드와 같은 이름의 메서드를 정의하면 두 개의 서로 별개인 메서드가 만들어진다.
class A { public: static void beStatic() { cout << " A static " << endl; } }; class B : public A { public: static void beStatic() { cout << "B static " << endl; } }; int main() { A a; B b; a.beStatic(); b.beStatic(); A &c=b; c.beStatic(); A *d=&b; d->beStatic(); getch(); return 0; }
static메서드는 그 메서드가 정의된 클래스에 의해서만 스코프가 지정되고 메서드가 호출되는 객체의 종류에는 영향받지 않는다. 클래스 안에서 static메서드를 호출할 때는 일반적인 스코프가 적용된다.
문법상 객체를 통해 호출될 때는 실제 객체의 타입과는 관계없이 그 객체를 참조하고 있는 타입만 이 호출할 메서드를 결정한다.
'@ 16. 1 ~ 17. 1 > C++' 카테고리의 다른 글
참조형 리턴 타입 / const 키워드 (0) 2014.03.05 메서드 오버라이딩의 특수한 경우들(2) (1) 2014.03.04 ostringstream (0) 2014.03.02 스마트 포인터와 ->, *연산자 오버로딩 (3) 2013.05.21 재귀함수를 이용한 팩토리얼 구하기, 최대공약수 구하기 (0) 2013.03.12