学会使用虚函数来定义成员函数使能够使用指针变量访问数据成员。
#include <iostream>
#include<string>
using namespace std;
class Animal
{
public:
virtual void cry() {cout<<"不知哪种动物,让我如何学叫?"<<endl;}
};
class Mouse : public Animal
{
public :
virtual void cry() {cout << "我叫Jerry,是一只老鼠,我的叫声是:吱吱吱!" << endl;}
Mouse(string Mousename);
private :
string Mousename;
};
class Cat : public Animal
{
public :
virtual void cry() {cout << "我叫Tom,是一只猫,我的叫声是:喵喵喵!" << endl;}
Cat (string Catname);
private :
string Catname;
};
class Dog :public Animal
{
public :
virtual void cry() {cout << "我叫Droopy,是一只狗,我的叫声是:汪汪汪!" << endl;}
Dog (string Dogname);
private :
string Dogname;
};
class Giraffe : public Animal
{
public :
virtual void cry() {cout << "我叫Gill,是长颈鹿,脖子太长,发不出声音来!" << endl;}
Giraffe (string Giraffename);
private :
string Giraffename;
};
Mouse::Mouse(string Mousename)
{
this -> Mousename = Mousename;
}
Cat::Cat(string Catname)
{
this -> Catname = Catname;
}
Dog::Dog(string Dogname)
{
this -> Dogname = Dogname;
}
Giraffe::Giraffe(string Giraffename)
{
this -> Giraffename = Giraffename;
}
int main( )
{
Animal *p;
p = new Animal();
p->cry(); //输出: 不知哪种动物,让我如何学叫?(问题出自此处)
Mouse m("Jerry");
p=&m;
p->cry(); //输出: 我叫Jerry,是一只老鼠,我的叫声是:吱吱吱!
Cat c("Tom");
p=&c;
p->cry(); //输出: 我叫Tom,是一只猫,我的叫声是:喵喵喵!
Dog d("Droopy");
p=&d;
p->cry(); //输出: 我叫Droopy,是一条狗,我的叫声是:汪汪汪!
Giraffe g("Gill");
p=&g;
p->cry(); //输出: 我叫Gill,是长颈鹿,脖子太长,发不出声音来!
system("pause");
return 0;
}
学会使用指针:用定义的基类指针通过赋值等来访问派生类的成员函数或成员。