#include <iostream>
using namespace std;
class Animal
{
public:
void eat(int x)
{
cout << "animal eat(int x) x=" << x << endl;
}
void sleep(int y)
{
cout << "animal sleep(int y) y=" << y << endl;
}
virtual void breathe()
{
cout << "animal breathe" << endl;
}
};
class Fish :public Animal
{
public:
void eat(int x)//隐藏了基类的eat()函数
{
cout << "fish eat(int x) x="<<x << endl;
}
void sleep(int y)//隐藏了基类的sleep()函数
{
cout << "fish sleep(int y) y=" <<y<< endl;
}
void breathe()//覆盖了基类的breathe()/函数
{
cout << "fish bubble" << endl;
}
};
int main()
{
std::cout << "Hello World!\r\n";
Fish fh;
fh.eat(1);
fh.sleep(2);
fh.breathe();
//Animal *pAn=&fh;
//Fish *pfish = &fh;
//
//pAn->eat(1);
//pfish->eat(2);
//pAn->sleep(3);
//pfish->sleep(4);
//pAn->breathe();
//pfish->breathe();
return 0;
}
Fish类的eat函数、sleep函数和Animal类的eat函数、sleep函数完全一样,无论是函数名,还是参数列表都一样的,称为函数的隐藏,隐藏是隐藏基类的同名函数。
#include <iostream>
using namespace std;
class Animal
{
public:
void eat(int x)
{
cout << "animal eat(int x) x=" << x << endl;
}
void sleep(int y)
{
cout << "animal sleep(int y) y=" << y << endl;
}
virtual void breathe()
{
cout << "animal breathe" << endl;
}
};
class Fish :public Animal
{
public:
void eat(int x)//隐藏了基类的eat()函数
{
cout << "fish eat(int x) x="<<x << endl;
}
void sleep(int y)//隐藏了基类的sleep()函数
{
cout << "fish sleep(int y) y=" <<y<< endl;
}
void breathe()//覆盖了基类的breathe()/函数
{
cout << "fish bubble" << endl;
}
};
int main()
{
std::cout << "Hello World!\r\n";
Fish fh;
Animal *pAn=&fh;
Fish *pfish = &fh;
pAn->eat(1);
pfish->eat(2);
pAn->sleep(3);
pfish->sleep(4);
pAn->breathe();
pfish->breathe();
return 0;
}
Fish类的breathe函数和Animal类的breathe函数完全一样,无论是函数名,还是参数列表都一样的,称为函数的覆盖。覆盖的是基类的同名虚函数。