免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2452 | 回复: 3
打印 上一主题 下一主题

[C++] C++新手求帮忙看看,求解惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-17 13:35 |只看该作者 |倒序浏览
  1. #include <iostream>
  2. using namespace std;
  3. class Goods{
  4.         double price;
  5. public:
  6.         Goods(double p=123.45):price(p){
  7.                 cout << "Goods("<<p<<")"<<endl;
  8.         }
  9.         ~Goods(){cout<<"~Goods()"<<endl;}
  10.         double getPrice(){return price;}
  11. };
  12. class Camera:virtual public Goods{
  13. public:
  14.         void take(const char* obj){
  15.                 cout << "给" << obj << "照相" << endl;
  16.         }
  17.         Camera(double p):Goods(p){cout<<"Camera()"<<endl;}
  18.         ~Camera(){cout<<"~Camera()"<<endl;}
  19. };
  20. class MP3:virtual public Goods{
  21. public:
  22.         void play(const char* song){
  23.                 cout << "播放歌曲《" << song << "》" << endl;
  24.         }
  25.         MP3(double p):Goods(p){cout<<"MP3()"<<endl;}
  26.         ~MP3(){cout<<"~MP3()"<<endl;}
  27. };
  28. class Phone:virtual public Goods{
  29. public:
  30.         void dial(const char* no){
  31.                 cout << "给" << no << "拨打电话" << endl;
  32.         }
  33.         Phone(double p):Goods(p){cout<<"Phone()"<<endl;}
  34.         ~Phone(){cout<<"~Phone()"<<endl;}
  35. };
  36. class ModernPhone : public Phone
  37. {//组合
  38.         string factory;
  39.         Goods g;
  40.         Camera c;
  41.         MP3 m;
  42. public:
  43.         void visitnet(const char* url){
  44.                 cout << "访问网址" << url << endl;
  45.         }
  46.         ModernPhone(const char* factory,double p)
  47.         :m(p),c(p),Phone(p),factory(factory),g(p)
  48.         {                cout << "ModernPhone()" << endl;        }
  49.         ~ModernPhone(){cout<<"~ModernPhone()"<<endl;}
  50.         void take(const char* obj){c.take(obj);}
  51.         void play(const char* song){m.play(song);}
  52.         double getPrice(){return g.getPrice();}
  53. };
  54. int main()
  55. {
  56.         ModernPhone mp("nokia",500);
  57.         mp.dial("110");
  58.         mp.play("北京欢迎你");
  59.         mp.visitnet("bbs.tarena.com.cn");
  60.         mp.take("康森林");
  61.         cout << mp.getPrice() << endl;
  62. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2014-02-17 13:36 |只看该作者
结果输出为Goods(123.45)
Phone()
Goods(500)
Goods(500)
Camera()
Goods(500)
MP3()
ModernPhone()
给110拨打电话
播放歌曲《北京欢迎你》
访问网址bbs.tarena.com.cn
给康森林照相
500
~ModernPhone()
~MP3()
~Goods()
~Camera()
~Goods()
~Goods()
~Phone()
~Goods()
Press any key to continue

第一个输出为啥会是Goods(123.45)呢,为啥p没有传过去,而用默认值呢??

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2014-02-18 10:11 |只看该作者
回复 2# dxxtl
p起作用了,后面不是打出来500了。
实例化子类的时候,会先调用父类的构造函数,
这是基类Goods构造函数里的代码。

   

论坛徽章:
0
4 [报告]
发表于 2014-02-25 22:46 |只看该作者
回复 3# Herowinter
对对,谢谢哥们,我2了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP