#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;
}
继承中的向上类型转换
最新推荐文章于 2023-04-20 17:35:01 发布