4elist1404.cpp

来自「《21天学通C++》附盘的原代码。书上的每个例子在这里都有相应的C语言程序。」· C++ 代码 · 共 96 行

CPP
96 行
字号
// 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...\n"; }
	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...\n";
}

class Bird
{
public:
	Bird(COLOR color, bool migrates);
	virtual ~Bird() {cout << "Bird destructor...\n";  }
	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...\n";
}

class Pegasus : public Horse, public Bird
{
public:
	void Chirp()const { Whinny(); }
	Pegasus(COLOR, HANDS, bool,long);
	~Pegasus() {cout << "Pegasus destructor...\n";}
	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...\n";
}

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.\n";
	delete pPeg;
	return 0;
}

⌨️ 快捷键说明

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