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;
}