⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list1404.cpp

📁 teach yourself C++ in 21 days 第五版
💻 CPP
字号:
// Listing 14.4
// Calling multiple constructors

#include <iostream>
using namespace std;

typedef int HANDS;
enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown } ;

class Horse
{
  public:
    Horse(COLOR color, HANDS height);
    virtual ~Horse() { cout << "Horse destructor..." << endl; }
    virtual void Whinny()const { cout << "Whinny!... "; }
    virtual HANDS GetHeight() const { return itsHeight; }
    virtual COLOR GetColor() const { return itsColor; }
  private:
    HANDS itsHeight;
    COLOR itsColor;
};

Horse::Horse(COLOR color, HANDS height):
itsColor(color),itsHeight(height)
{
   cout << "Horse constructor..." << endl;
}

class Bird
{
  public:
    Bird(COLOR color, bool migrates);
    virtual ~Bird() {cout << "Bird destructor..." << endl;  }
    virtual void Chirp()const { cout << "Chirp... ";  }
    virtual void Fly()const
    {
      cout << "I can fly! I can fly! I can fly! ";
    }
    virtual COLOR GetColor()const { return itsColor; }
    virtual bool GetMigration() const { return itsMigration; }

  private:
    COLOR itsColor;
    bool itsMigration;
};

Bird::Bird(COLOR color, bool migrates):
itsColor(color), itsMigration(migrates)
{
   cout << "Bird constructor..." << endl;
}

class Pegasus : public Horse, public Bird
{
  public:
    void Chirp()const { Whinny(); }
    Pegasus(COLOR, HANDS, bool,long);
    ~Pegasus() {cout << "Pegasus destructor..." << endl;}
    virtual long GetNumberBelievers() const
    {
      return  itsNumberBelievers;
    }

  private:
    long itsNumberBelievers;
};

Pegasus::Pegasus(
   COLOR aColor,
   HANDS height,
   bool migrates,
   long NumBelieve):
   Horse(aColor, height),
   Bird(aColor, migrates),
   itsNumberBelievers(NumBelieve)
{
   cout << "Pegasus constructor..." << endl;
}

int main()
{
   Pegasus *pPeg = new Pegasus(Red, 5, true, 10);
   pPeg->Fly();
   pPeg->Whinny();
   cout << "\nYour Pegasus is " << pPeg->GetHeight();
   cout << " hands tall and ";
   if (pPeg->GetMigration())
      cout << "it does migrate.";
   else
      cout << "it does not migrate.";
   cout << "\nA total of " << pPeg->GetNumberBelievers();
   cout << " people believe it exists." << endl;
   delete pPeg;
   return 0;
}

⌨️ 快捷键说明

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