C++ 容器中类型是固定的,一个容器不可能共存多种类型,但是我们可以将一个派生类的普通指针转换成一个基类指针一样,我们也可以把一个派生类的只能指针换成是基类指针。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <ext/memory>
#include <vector>
using namespace std;
class A{
public:
double a;
double discut;
A(double aa = 0, double dd = 0):a(aa), discut(dd){};
virtual void havetopay(){
printf("%.2f\n", a * discut);
}
};
class B : public A{
public:
double cut;
B(double aa, double bb, double cc){
a = aa;
discut = bb;
cut = cc;
}
void havetopay(){
printf("%.2f\n", a * discut - cut);
}
};
int main(){
/*
智能指针
vector<shared_ptr<A>> vec;
vec.push_back(make_shared<A>(1.0, 0.5));
vec.back()->havetopay();
B b = B(1.0, 0.8, 0.1);
vec.push_back(make_shared<B>(1.0, 0.5, 0.1));
vec.back()->havetopay();*/
vector< A *> vec;
A a = A(1.0, 0.5);
vec.push_back(&a);
B b = B(1.0, 0.5, 0.1);
vec.push_back(&b);
vec.back()->havetopay();
return 0;
}