练习(一)

类静态成员的应用:

Code:
  1. #include <iostream>   
  2. #include <sstream>   
  3. #include <string>   
  4. using namespace std;   
  5. class Bird   
  6. {   
  7. public:   
  8.   Bird()   
  9.   {   
  10.     stringstream os;   
  11.     os << "Bird " << ++BirdNum << "#";   
  12.     BirdName = os.str();   
  13.   }   
  14.   friend ostream& operator<<(ostream& os,const Bird& b)   
  15.   {   
  16.     return os << b.BirdName;   
  17.   }   
  18. private:   
  19.   string BirdName;   
  20.   static int BirdNum;   
  21. };   
  22. int Bird::BirdNum = 0;   
  23. int main()   
  24. {   
  25.     Bird bird1;   
  26.     cout << bird1 << endl;   
  27.     Bird bird2;   
  28.     cout << bird2 << endl;   
  29.     return 0;   
  30. }  

 继承中的类成员:

Code:
  1. #include <iostream>   
  2. #include <sstream>   
  3. #include <string>   
  4. using namespace std;   
  5. class Bird   
  6. {   
  7. public:   
  8.   Bird()   
  9.   {   
  10.     stringstream os;   
  11.     os << "Bird " << ++BirdNum << "#";   
  12.     BirdName = os.str();   
  13.   }   
  14.   friend ostream& operator<<(ostream& os,const Bird& b)   
  15.   {   
  16.     return os << b.BirdName;   
  17.   }   
  18. private:   
  19.   string BirdName;   
  20.   static int BirdNum;   
  21. };   
  22. int Bird::BirdNum = 0;   
  23. class BirdHouse   
  24. {   
  25. public:   
  26.   BirdHouse(const Bird& b1,Bird *b2,Bird &b3):valBird(b1),reBird(b3)   
  27.   {   
  28.     ptrBird = b2;   
  29.   }   
  30.   BirdHouse(const BirdHouse& bh):reBird(bh.reBird)   
  31.   {   
  32.     valBird = bh.valBird;   
  33.     ptrBird = new Bird(*bh.ptrBird);   
  34.   }   
  35.   BirdHouse operator=(const BirdHouse& bh)   
  36.   {   
  37.     valBird = bh.valBird;   
  38.     ptrBird = new Bird;   
  39.     *ptrBird = *(bh.ptrBird);   
  40.     reBird = bh.reBird;   
  41.   }   
  42.   friend ostream& operator<<(ostream &os,const BirdHouse& bh)   
  43.   {   
  44.     return os << "valBird: " << bh.valBird << endl << "ptrBird: " << *bh.ptrBird    
  45.      << endl << "reBird: " << bh.reBird;   
  46.   }   
  47. private:   
  48.   Bird valBird;   
  49.   Bird *ptrBird;   
  50.   Bird &reBird;   
  51. };   
  52. int main()   
  53. {   
  54.     Bird bird1,bird2,bird3;   
  55.     BirdHouse birdhouse(bird1,&bird2,bird3);   
  56.     cout << birdhouse << endl;   
  57.     return 0;   
  58. }  

由此代码和以得出,引用成员必须在构造函数的初始化列表处进行初始化,普通构造函数和复制构造函数都必须这么做。在这里我们为指针成员赋值的时候是直接进行了副本,而非直接赋值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值