实际上多重继承及虚继承用的比较少 如果有需要 可以写成组合的形式
内部类按声明顺序构造
#include <iostream>
using namespace std;
class Goods
{
double price;
public:
Goods(double p=123.4):price(p){cout << "Goods("<< p << ")" <<endl;}
~Goods(){cout << "~Goods()" <<endl;}
double getprice() {return price;}
};
class Camera
{
public:
Camera() {cout << "Camera()" <<endl;}
~Camera() {cout << "~Camera()" <<endl;}
void take(const char* obj)
{
cout << "给" << obj << "照相" <<endl;
}
};
class Mp3
{
public:
Mp3(){cout << "Mp3()" << endl;}
~Mp3(){cout << "~Mp3()" << endl;}
void play(const char *song)
{
cout << "播放歌曲《" << song << "》"<< endl;
}
};
class Phone
{
public:
Phone() {cout << "Phone()" <<endl;}
~Phone() {cout << "~Phone()" <<endl;}
void dial(const char* no){cout << "给" << no <<"拨打电话" << endl;}
};
//组合 :所谓类的组合是指:类中的成员数据是另一个类的对象
class ModernPhone:public Phone
{
string factory;
Camera c;
Mp3 m;
Goods g;
public:
// 若父类和内部对象构造需要参数 ,则在参数列表中初始化 这里不需要就不写了
ModernPhone(const char* factory,double price):factory(factory)
{
cout << "ModernPhone()" <<endl;
}
~ModernPhone()
{
cout << "~ModernPhone()" <<endl;
}
void vistnet(const char* url)
{
cout << "访问网址" << url <<endl;
}
void take(const char *obj)
{
c.take(obj);
}
void play(const char* song)
{
m.play(song);
}
double getprice()
{
return g.getprice();
}
};
int main()
{
ModernPhone mp("Nokia",1000);
cout << mp.getprice() <<endl;
mp.play("小夜曲");
mp.take("唐伯虎");
mp.dial("110");
mp.vistnet("www.baidu.com");
}