类静态成员的应用:
- #include <iostream>
- #include <sstream>
- #include <string>
- using namespace std;
- class Bird
- {
- public:
- Bird()
- {
- stringstream os;
- os << "Bird " << ++BirdNum << "#";
- BirdName = os.str();
- }
- friend ostream& operator<<(ostream& os,const Bird& b)
- {
- return os << b.BirdName;
- }
- private:
- string BirdName;
- static int BirdNum;
- };
- int Bird::BirdNum = 0;
- int main()
- {
- Bird bird1;
- cout << bird1 << endl;
- Bird bird2;
- cout << bird2 << endl;
- return 0;
- }
继承中的类成员:
- #include <iostream>
- #include <sstream>
- #include <string>
- using namespace std;
- class Bird
- {
- public:
- Bird()
- {
- stringstream os;
- os << "Bird " << ++BirdNum << "#";
- BirdName = os.str();
- }
- friend ostream& operator<<(ostream& os,const Bird& b)
- {
- return os << b.BirdName;
- }
- private:
- string BirdName;
- static int BirdNum;
- };
- int Bird::BirdNum = 0;
- class BirdHouse
- {
- public:
- BirdHouse(const Bird& b1,Bird *b2,Bird &b3):valBird(b1),reBird(b3)
- {
- ptrBird = b2;
- }
- BirdHouse(const BirdHouse& bh):reBird(bh.reBird)
- {
- valBird = bh.valBird;
- ptrBird = new Bird(*bh.ptrBird);
- }
- BirdHouse operator=(const BirdHouse& bh)
- {
- valBird = bh.valBird;
- ptrBird = new Bird;
- *ptrBird = *(bh.ptrBird);
- reBird = bh.reBird;
- }
- friend ostream& operator<<(ostream &os,const BirdHouse& bh)
- {
- return os << "valBird: " << bh.valBird << endl << "ptrBird: " << *bh.ptrBird
- << endl << "reBird: " << bh.reBird;
- }
- private:
- Bird valBird;
- Bird *ptrBird;
- Bird &reBird;
- };
- int main()
- {
- Bird bird1,bird2,bird3;
- BirdHouse birdhouse(bird1,&bird2,bird3);
- cout << birdhouse << endl;
- return 0;
- }
由此代码和以得出,引用成员必须在构造函数的初始化列表处进行初始化,普通构造函数和复制构造函数都必须这么做。在这里我们为指针成员赋值的时候是直接进行了副本,而非直接赋值。