헤더파일

다형성, 레퍼런스 본문

C++

다형성, 레퍼런스

헤더파일 2018. 3. 5. 14:38
다형성

지료형이 다른데 같은 이름의 함수로 비슷한 행동을 한다.

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이다. 포인터의 주소 값이 복사 된것이다.  함수를 바꾸지 않으면서 호출방식을 바꾸고 싶다면 레퍼런스를 쓰는 게 좋다.

'C++' 카테고리의 다른 글

스마트 포인터  (0) 2018.04.05
이동  (2) 2018.03.29
템플릿 - 3  (0) 2018.03.22
템플릿- 2  (0) 2018.03.19
템플릿  (0) 2018.03.08
Comments