4elist1510.cpp

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

CPP
76 行
字号
//Listing 15.10 Pointers to member functions using virtual methods

#include <iostream>
using namespace std;

class Mammal
{
public:
	Mammal():itsAge(1) {  }
	virtual ~Mammal() { }
	virtual void Speak() const = 0;
	virtual void Move() const = 0;
protected:
	int itsAge;
};

class Dog : public Mammal
{
public:
	void Speak()const { cout << "Woof!\n"; }
	void Move() const { cout << "Walking to heel...\n"; }
};


class Cat : public Mammal
{
public:
	void Speak()const { cout << "Meow!\n"; }
	void Move() const { cout << "slinking...\n"; }
};


class Horse : public Mammal
{
public:
	void Speak()const { cout << "Winnie!\n"; }
	void Move() const { cout << "Galloping...\n"; }
};


int main()
{
	void (Mammal::*pFunc)() const =0;
	Mammal* ptr =0;
	int Animal;
	int Method;
	bool fQuit = false;

	while (fQuit == false)
	{
		cout << "(0)Quit (1)dog (2)cat (3)horse: ";
		cin >> Animal;
		switch (Animal)
		{
		case 1:	ptr = new Dog; break;
		case 2: ptr = new Cat; break;
		case 3: ptr = new Horse; break;
		default: fQuit = true; break;
		}
		if (fQuit)
			break;

		cout << "(1)Speak  (2)Move: ";
		cin >> Method;
		switch (Method)
		{
		case 1: pFunc = Mammal::Speak; break;
		default: pFunc = Mammal::Move; break;
		}

		(ptr->*pFunc)();
		delete ptr;
	}
	return 0;
}

⌨️ 快捷键说明

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