Notice
Recent Posts
Recent Comments
Link
헤더파일
다형성, 레퍼런스 본문
다형성
지료형이 다른데 같은 이름의 함수로 비슷한 행동을 한다.
Dog d;
Bird b;
d.move();
b.move();
virtual이라고 이름이 붙은 함수는 4바이트씩 메모리가 희생된다. 함수가 어디있는지 찾아가기 위함.
virtual void move() = 0;
반드시 구현하도록 강제. 구현안 하면 컴파일러 상에서 오류가 뜬다. 하위 클래스에서는 반드시 오버라이드 해야한다.
#include<iostream>
class Animal
{
public:
virtual void move() = 0;
};
class Dog : public Animal
{
public:
void move() { std::cout << "개" << std::endl; }
};
class Bird :public Animal
{
public:
void move() { std::cout << "새" << std::endl; }
};
int main()
{
Animal* p[3];
p[0] = new Dog();
p[1] = new Bird();
p[2] = new Bird();
for(int i=0; i<3 ; ++i)
{
p[i]->move();
}
}
Animal 배열안에 어떤 클래스가 있는지 모르지만 모두 move클래스가 구현되어 있기 때문에 이게 가능하다.
void change(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
포인터를 전달하는 것도 call by value이다. 포인터의 주소 값이 복사 된것이다. 함수를 바꾸지 않으면서 호출방식을 바꾸고 싶다면 레퍼런스를 쓰는 게 좋다.