继承中的向上类型转换

来源:互联网 发布:java实现md5解密算法 编辑:程序博客网 时间:2024/06/06 19:16
#include <iostream>using namespace std;enum note{middleC,Csharp,Cflat};class Instrument{public:void play(note) const {}};class Flute : public Instrument{};void tune(Instrument& i){i.play(middleC);}class Parent{private:int i;public:Parent(int ii) : i(ii){cout << "Parent(int ii)\n";}Parent(const Parent& b) : i(b.i){cout << "Parent(const Parent&)\n";}Parent() : i(0){cout << "Parent()\n";}friend ostream& operator<<(ostream& os, const Parent& b){return os << "Parent: " << b.i << endl;}~Parent() {}};class Member{private:int i;public:Member(int ii) : i(ii){cout << "Member(int ii)\n";}Member(const Member& m) : i(m.i){cout << "Member(const Member&)\n";}Member() : i(0){cout << "Member()\n";}friend ostream& operator<<(ostream& os, const Member& m){return os << "Member: " << m.i << endl;}~Member() {}};class Child : public Parent{private:int i;Member m;public:Child(int ii) : i(ii), Parent(ii), m(ii){cout << "Child(int ii)\n";}friend ostream& operator<<(ostream& os, const Child& c){return os << Parent(c)      << c.m      << "Child: " << c.i << endl;}};int main(){Parent p(9);cout << p;Child c(5);cout << c;Instrument i;tune(i);Flute f;tune(f);  // 向上转型,这就是继承中向上类型转换,return 0;}

0 0