📄 ptrtomember.cpp
字号:
//Listing 20.9 Pointers to member functions
#include <iostream>
enum BOOL {FALSE, TRUE};
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 { std::cout << "Woof!\n"; }
void Move() const { std::cout << "Walking to heel...\n"; }
};
class Cat : public Mammal
{
public:
void Speak()const { std::cout << "Meow!\n"; }
void Move() const { std::cout << "slinking...\n"; }
};
class Horse : public Mammal
{
public:
void Speak()const { std::cout << "Winnie!\n"; }
void Move() const { std::cout << "Galloping...\n"; }
};
int main()
{
void (Mammal::*pFunc)() const =0;
Mammal* ptr =0;
int Animal;
int Method;
bool fQuit = false;
while (fQuit == false)
{
std::cout << "(0)Quit (1)dog (2)cat (3)horse: ";
std::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;
std::cout << "(1)Speak (2)Move: ";
std::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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -