/*
若容器中直接储存类(如vector),则当push_back一个 D 时,其派生部分会被"切掉".
因此在用容器储存带有继承关系的对象时, 我们将选用基类的指针(最好是智能指针).
目的是保证容器的兼容性.
*/
#include
#include
#include
using namespace std;
class B
{
public:
B (int new_value = 1) :value (new_value) {}
virtual int get_value () { return value * 2; }
private:
int value;
};
class D :public B
{
public:
D (int new_dvalue = 1) :B (), dvalue(new_dvalue) {}
int get_value ()override { return dvalue * 3; }
private:
int dvalue;
};
int main ()
{
std::ios::sync_with_stdio (false);
vector
>bvec; for (size_t i = 0; i < 10; ++i) bvec.push_back (make_shared ()); int sum = 0; for (const auto &obj : bvec) sum += obj->get_value(); cout << sum << endl; return 0; }
用容器储存有继承关系的对象
最新推荐文章于 2023-05-11 08:41:54 发布