现在的位置: 首页 > 综合 > 正文

练习(一)

2013年01月05日 ⁄ 综合 ⁄ 共 1840字 ⁄ 字号 评论关闭

类静态成员的应用:

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. }  

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

抱歉!评论已关闭.