【c++】虚函数比起一般函数有哪方面的优势?

来源:百度知道 编辑:UC知道 时间:2024/07/05 03:11:41
一个名字不同效果,这用一般(类中)函数不也能实现吗?
我的教材上讲的不明确
请讲得尽量浅显一些,我是初学者

虚函数定义的是接口和实现
就是预见到子类可能对该接口有不同的定义

比如动物父类可以定义
只须定义一个公共的方法,无须考虑如何实现
virtual void eat();

牛子类,有自己的实现方式
void eat(){printf("Eat Grass"); }

老虎子类,有自己的实现方式
void eat(){printf("Eat Animal"); }

一般(类中)函数能实现的是成员函数的重载(Overload),是指函数名相同,而函数参数表不同,可以通过不同的参数表来调用同个函数名的函数。
虚函数是针对基类和派生类的继承关系来说的,是为了实现多态性而定义的。基类中定义了了一个虚函数,派生类可以通过改写(Override)该函数来获得新的定义,改写的函数名,函数参数表,返回类型都必须和基类的虚函数相同(基类若返回类类型,派生类可返回从基类返回类派生的类类型)。
因此,这2种是完全不同的。通过下面的例子就可以清楚地看出区别:
class test
{
public:
void func(int num)
{
cout<<"func(int)"<<endl;
}

void func(float num)
{
cout<<"func(float)"<<endl;
{
};
这是函数的重载,使用的时候:
int a=5;
float b=3.6f;
test t;
t.func(a);//调用func(int)
t.func(b);//调用func(float)

class Person
{
public:
virtual void talk()
{
cout<<&