#include <iostream>
#include <vector>
#include <memory>
class Base{
public:
Base(int age)
{
m_age = age;
}
Base& operator=(const Base &b)
{
m_age = b.m_age;
}
virtual void show_data() const
{
std::cout<<"Base:"<<m_age<<std::endl;
}
int m_age;
};
class Dervied : public Base{
public:
Dervied(const std::string& name, const int age):m_name(name), Base(age){}
void show_data() const override
{
std::cout<<"Devied:"<<m_name<<std::endl;
}
std::string m_name;
};
void test()
{
std::vector<Base> baseContainer;
Dervied d("zhangsan", 20);
baseContainer.push_back(d);
baseContainer[0].show_data();
std::vector<Base*> basePtrContainer;
basePtrContainer.push_back(&d);
typedef std::shared_ptr<Base> baseSharedPtr;
typedef std::vector<baseSharedPtr> baseSharedPtrContainer;
baseSharedPtrContainer vec;
auto son = std::make_shared<Dervied>("zhangsan", 20);
vec.push_back(son);
vec[0]->show_data();
}
int main()
{
test();
return 0;
}