상속할때 보통 부모클래스보다는 자식클래스가 정보를 많이 가지고 있다.
이유 : 추가 함수,추가 변수,오버라이딩 등등
작은 부모의 객체에 큰 자식클래스를 대입한다면 다형성이 사라진다.
부모객체로 인식한다고 생각하면된다.
즉, 자식에 추가된 데이터들이 사라진다.
reference_wapper를 사용하거 포인터를 사용하면 객체잘림을 막을 수 있다.
당연, 포인터를 생각해보면 주소값을 대입하는거니 데이터는 그대로 남아있겠지?
#include <iostream>
#include <vector>
using namespace std;
class Base
{
public:
int m_i = 0;
virtual void print()
{
cout << "I'm Base" << endl;
}
};
class Der : public Base
{
public:
int m_d = 0;
virtual void print() override
{
cout << "I'm Der" << endl;
}
};
int main()
{
Der d;
Base b = d;
b.print();
//reference_wrapper를 사용하거나 *포인터 사용이가능하다.
vector<reference_wrapper<Base>> my_vec;
my_vec.push_back(b);
my_vec.push_back(d);
//reference_wrapper는 ref를 받아오기위해 get()을 사용한다.
for (auto & a : my_vec)
a.get().print();
vector<Base*> my_vec2;
my_vec2.push_back(&b);
my_vec2.push_back(&d);
for (auto & a : my_vec2)
a->print();
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 유도클래스 출력연산자 이용하기 (0) | 2019.09.30 |
---|---|
c++ dynamic_cast 동적형변환 (0) | 2019.09.30 |
c++ 다이아몬드 상속문제 해결 (0) | 2019.09.30 |
c++ 순수가상함수,추상기본클래스,인터페이스 (0) | 2019.09.30 |
c++ vitual,가상함수 (0) | 2019.09.30 |