//***** 虚函数 *****
class Father
{
public:
virtual void run() //virtual是C++里面的关键字,代表该函数是虚函数
{
std::cout << "父亲可以跑万米!" << std::endl;
}
void jump()
{
std::cout << "父亲可以跳五个台阶!" << std::endl;
}
};
class Son:public Father
{
public:
void run()
{
std::cout << "儿子可以跑十万米!" << std::endl;
}
void jump()
{
std::cout << "儿子可以跳十个台阶!" << std::endl;
}
};
//***** 虚函数使用 *****
void test1()
{
Father *p1 = new Son;
p1->run();
p1->jump();
delete(p1);
p1 = NULL;
Son *p2 = new Son;
p2->run();
p2->jump();
delete(p2);
p2 = NULL;
// run()函数在没有添加virtual关键字之前的输出:
/*
输出:
父亲可以跑万米!
父亲可以跳五个台阶!
儿子可以跑十万米!
儿子可以跳十个台阶!
*/
Father *p3 = new Son;
p3->run();
p3->jump();
delete(p3);
p3 = NULL;
Son *p4 = new Son;
p4->run();
p4->jump();
delete(p4);
p4 = NULL;
// run()函数在添加virtual关键字之后的输出:
/*
输出:
儿子可以跑十万米!
父亲可以跳五个台阶!
儿子可以跑十万米!
儿子可以跳十个台阶!
*/
/*
虚函数:
为什么两种的情况不相同呢,这是因为在run()函数前面加了关键字virtual,表示该函数是虚函数
虚函数,实际上表示该函数是多种形态的,即函数可以被多个对象所拥有,而且功能不一,换句话说,就是多个对象在调用同一个名字的函数时,
会产生不同的效果。系统在执行virtual函数时,会自动判断是哪个对象调用了它,然后调用该对象的同名函数。
*/
}
//***** 虚函数原理 *****
class player // 选手
{
public:
virtual void beat()
{
std::cout << "一般选手的力量为260磅" << std::endl;
}
protected:
int age;
};
class Ali:public player // 阿里
{
public:
void beat()
{
std::cout << "阿里一拳的力量为420磅" << std::endl;
}
};
class Lewis:public player // 刘易斯
{
public:
void beat()
{
std::cout << "刘易斯一拳的力量为480磅" << std::endl;
}
};
class Tyson:public player // 泰森
{
public:
void beat()
{
std::cout << "泰森一拳的力量为500磅" << std::endl;
}
};
void test1()
{
player *p[4];
player *p1 = NULL;
int choice;
for(int i = 0; i < 4; i ++)
{
std::cout << "(1)阿里(2)刘易斯(3)泰森:";
std::cin >> choice;
switch(choice)
{
case 1:
p1 = new Ali;
break;
case 2:
p1 = new Lewis;
break;
case 3:
p1 = new Tyson;
break;
default:
p1 = new player;
break;
}
p[i] = p1;
p[i]->beat();
delete(p[i]);
p[i] = NULL;
}
}