虚函数问题

1、基于向上类型转换,基类通过虚函数可以对多个子类相似的功能实现统一管理。
2、例子:
A为基类,B、C为A的同级子类。virtual只需在基类中标识一次,子类无需重复标识。
class A
{
virtual void display(){cout<<"我是A"<<endl;}
}
class B:public A
{
void display(){cout<<"我是B"<<endl;}
}

class C:public A
{
void display(){cout<<"我是C"<<endl;}
}

void display(A s)//以A类型作为参数的顶层函数,不同于类中的成员函数
{
 s.display();//调用对象s的成员函数
}
int main()
{
 A x1;
 B x2;
 C x3;
 display(x1);//显示:我是A。
 display(x2);//参数x2向上转换为x1类型,显示:我是B。
display(x3);//参数x3向上转换为x1类型,显示:我是C。
}
通过显示我们注意到以下两点:1、尽管在顶层函数的定义中是以基类A作为其参数,但却能接受基类A的任一子类作为其参数。事实上,这是基于自动向上类型转换,即子类转换为它的父类型。2、虽然子类转换成了它的父类型,但却可正确调用属于子类而不属于父类的成员函数。这是虚函数的功劳。这样,我们通过设计一个以基类型作为参数的顶层函数,就可实现基类及其所有子类相似功能的统一管理,而不用理会不同对象自身的类型。当然你还是可以利用域解析符去调用想要的成员函数,但情况并不总是那么顺利。当类层次很多时,你可能都不太记得你创建的对象属于哪个类型了。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 
 
虚函数和抽象函数的区别
主要区别就是自身是否包含实现
通过派生类的继承和重写来进行代码的多态和高效利用
{子类能自动转化成父类,然后通过父类的调用来实现子类的重写功能;
虚函数与抽象函数的区别就是,虚函数有具体的实现,同时再被重写的时候能通过子类调用超类,实现子类的函数,实现多态;
抽象函数就是不能有具体的实现,感觉后面的实现应该也差不多的,抽象类就不能实例化了。}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值