69,382
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
class Mammal
{
public:
Mammal():age(1) { std::cout << "Mammal construct\n"; }
virtual ~Mammal() { std::cout << "Mammal destruct\n"; }
virtual void speak() const { std::cout << "Mammal speak\n"; }
protected:
int age;
};
class Cat: public Mammal
{
public:
Cat() { std::cout << "Cat constructor\n"; }
~Cat() { std::cout << "Cat destructor\n"; }
void speak() const { std::cout << "Meow!\n"; }
void purr() const { std::cout << "Rrrrrrrr\n"; }
};
class Dog: public Mammal
{
public:
Dog() { std::cout << "Dog constructor\n"; }
~Dog() { std::cout << "Dof destructor\n"; }
void speak() const { std::cout << "Woof\n"; }
};
int main()
{
const int numberMammals = 3;
Mammal* zoo[numberMammals];
Mammal* pMammal;
int choice,i;
for (i = 0; i < numberMammals; i++)
{
std::cout << "(1)Dog (2)Cat: ";
std::cin >> choice;
if(choice == 1)
zoo[i] = new Dog;
else
zoo[i] = new Cat;
}
std::cout << "\n";
for (i=0; i < numberMammals; i++)
{
zoo[i]->speak();
Cat *pRealCat = dynamic_cast<Cat *> (zoo[i]); //问题出在这里,但是我是按书上的,???
if (pRealCat)
pRealCat->purr();
else
std::cout << "Uh oh, not a cat!\n";
delete zoo[i];
std::cout << "\n";
}
return 0;
}