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

📄 4elist1211.cpp

📁 《21天学通C++》附盘的原代码。书上的每个例子在这里都有相应的C语言程序。
💻 CPP
字号:
//Listing 12.11 Virtual copy constructor

#include <iostream>
using namespace std;

class Mammal
{
public:
	Mammal():itsAge(1) { cout << "Mammal constructor...\n"; }
	virtual ~Mammal() { cout << "Mammal destructor...\n"; }
	Mammal (const Mammal & rhs);
	virtual void Speak() const { cout << "Mammal speak!\n"; }
	virtual Mammal* Clone() { return new Mammal(*this); }
	int GetAge()const { return itsAge; }
protected:
	int itsAge;
};

Mammal::Mammal (const Mammal & rhs):itsAge(rhs.GetAge())
{
	cout << "Mammal Copy Constructor...\n";
}

class Dog : public Mammal
{
public:
	Dog() { cout << "Dog constructor...\n"; }
	virtual ~Dog() { cout << "Dog destructor...\n"; }
	Dog (const Dog & rhs);
	void Speak()const { cout << "Woof!\n"; }
	virtual Mammal* Clone() { return new Dog(*this); }
};

Dog::Dog(const Dog & rhs):
Mammal(rhs)
{
	cout << "Dog copy constructor...\n";
}

class Cat : public Mammal
{
public:
	Cat() { cout << "Cat constructor...\n"; }
	~Cat() { cout << "Cat destructor...\n"; }
	Cat (const Cat &);
	void Speak()const { cout << "Meow!\n"; }
	virtual Mammal* Clone() { return new Cat(*this); }
};

Cat::Cat(const Cat & rhs):
Mammal(rhs)
{
	cout << "Cat copy constructor...\n";
}

enum ANIMALS { MAMMAL, DOG, CAT};
const int NumAnimalTypes = 3;
int main()
{
	Mammal *theArray[NumAnimalTypes];
	Mammal* ptr;
	int choice, i;
	for ( i = 0; i<NumAnimalTypes; i++)
	{
		cout << "(1)dog (2)cat (3)Mammal: ";
		cin >> choice;
		switch (choice)
		{
		case DOG:	ptr = new Dog;
					break;
		case CAT:	ptr = new Cat;
					break;
		default:	ptr = new Mammal;
					break;
		}
		theArray[i] = ptr;
	}
	Mammal *OtherArray[NumAnimalTypes];
	for (i=0;i<NumAnimalTypes;i++)
	{
		theArray[i]->Speak();
		OtherArray[i] = theArray[i]->Clone();
	}
	for (i=0;i<NumAnimalTypes;i++)
		OtherArray[i]->Speak();
	return 0;
}

⌨️ 快捷键说明

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