overloadderive.cpp

来自「《24学时精通c++》的光盘内容」· C++ 代码 · 共 128 行

CPP
128
字号
 //Listing 16.4 Overloading constructors in derived classes
 #include <iostream>

 enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };

 class Mammal
 {
 public:
     // constructors
     Mammal();
     Mammal(int age);
     ~Mammal();

     //accessors
     int GetAge() const { return itsAge; }
     void SetAge(int age) { itsAge = age; }
     int GetWeight() const { return itsWeight; }
     void SetWeight(int weight) { itsWeight = weight; }

     //Other methods
     void Speak() const { std::cout << "Mammal sound!\n"; }
     void Sleep() const { std::cout << "shhh. I'm sleeping.\n"; }

 protected:
     int itsAge;
     int itsWeight;
 };

 class Dog : public Mammal
 {
 public:
     // Constructors
     Dog();
     Dog(int age);
     Dog(int age, int weight);
     Dog(int age, BREED breed);
     Dog(int age, int weight, BREED breed);
     ~Dog();

     // Accessors
     BREED GetBreed() const { return itsBreed; }
     void SetBreed(BREED breed) { itsBreed = breed; }

     // Other methods
     void WagTail() { std::cout << "Tail wagging...\n"; }
     void BegForFood() { std::cout << "Begging for food...\n"; }

 private:
     BREED itsBreed;
 };

 Mammal::Mammal():
 itsAge(1),
 itsWeight(5)
 {
     std::cout << "Mammal constructor...\n";
 }

 Mammal::Mammal(int age):
 itsAge(age),
 itsWeight(5)
 {
     std::cout << "Mammal(int) constructor...\n";
 }

 Mammal::~Mammal()
 {
     std::cout << "Mammal destructor...\n";
 }

 Dog::Dog():
 Mammal(),
 itsBreed(YORKIE)
 {
     std::cout << "Dog constructor...\n";
 }

 Dog::Dog(int age):
 Mammal(age),
 itsBreed(YORKIE)
 {
     std::cout << "Dog(int) constructor...\n";
 }

 Dog::Dog(int age, int weight):
 Mammal(age),
 itsBreed(YORKIE)
 {
     itsWeight = weight;
     std::cout << "Dog(int, int) constructor...\n";
 }

 Dog::Dog(int age, int weight, BREED breed):
 Mammal(age),
 itsBreed(breed)
 {
     itsWeight = weight;
     std::cout << "Dog(int, int, BREED) constructor...\n";
 }

 Dog::Dog(int age, BREED breed):
 Mammal(age),
 itsBreed(breed)
 {
     std::cout << "Dog(int, BREED) constructor...\n";
 }

 Dog::~Dog()
 {
     std::cout << "Dog destructor...\n";
 }

 int main()
 {
     Dog fido;
     Dog rover(5);
     Dog buster(6,8);
     Dog yorkie (3,YORKIE);
     Dog dobbie (4,20,DOBERMAN);
     fido.Speak();
     rover.WagTail();
     std::cout << "Yorkie is "
         << yorkie.GetAge() << " years old\n";
     std::cout << "Dobbie weighs "
         << dobbie.GetWeight() << " pounds\n";
     return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?