Inheritance
同时继承多个class
1 2 3
| class D :public A, public B, public C { }
|
虚函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include <iostream> #include <vector>
using namespace std;
class HotelRoom { public: HotelRoom(int bedrooms, int bathrooms) : bedrooms_(bedrooms), bathrooms_(bathrooms) {} virtual int get_price() {//这里如果不定义成虚函数,下面get_price就会一直调用普通房的计算函数 return 50*bedrooms_ + 100*bathrooms_; } private: int bedrooms_; int bathrooms_; };
class HotelApartment : public HotelRoom { public: HotelApartment(int bedrooms, int bathrooms) : HotelRoom(bedrooms, bathrooms) {}
int get_price() { return HotelRoom::get_price() + 100; } };
int main() { int n; cin >> n; vector<HotelRoom*> rooms;//定义一个向量,里面存放的是普通房指针 for (int i = 0; i < n; ++i) { string room_type; int bedrooms; int bathrooms; cin >> room_type >> bedrooms >> bathrooms; if (room_type == "standard") { rooms.push_back(new HotelRoom(bedrooms, bathrooms));//这个指针指向 普通房 } else { rooms.push_back(new HotelApartment(bedrooms, bathrooms));//这个普通房指针指向派生类,虚函数实现的是派生类的 } }
int total_profit = 0; for (auto room : rooms) { total_profit += room->get_price(); } cout << total_profit << endl;
for (auto room : rooms) { delete room; } rooms.clear();
return 0; }
|