c语言使用virtual类型,c语言virtual关键字

本文详细介绍了C++中的多态性,重点讨论了虚拟函数的作用和函数覆盖的概念。通过示例展示了如何使用基类指针调用派生类的重写函数,以及多态性与函数重载的区别。同时,提到了函数隐藏的现象以及无virtual关键字时的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Base的print函数。

这是面向对象中的多态性的体现。

class Base

{

public:Base(){}

public:

virtual void print(){cout<

};

class Derived:public Base

{

public:Derived(){}

public:

void print(){cout<

};

int main()

{

Base *point=new Derived();

point->print();

}

Output:

Derived

这也许会使人联想到函数的重载,但稍加对比就会发现两者是完全不同的:

(1) 重载的几个函数必须在同一个类中;

覆盖的函数必须在有继承关系的不同的类中

(2) 覆盖的几个函数必须函数名、参数、返回值都相同;

重载的函数必须函数名相同,参数不同。参数不同的目的就是为了在函数调用的时候编译器能够通过参数来判断程序是在调用的哪个函数。这也就很自然地解释了为什么函数不能通过返回值不同来重载,因为程序在调用函数时很有可能不关心返回值,编译器就无法从代码中看出程序在调用的是哪个函数了。

(3) 覆盖的函数前必须加关键字Virtual;

重载和Virtual没有任何瓜葛,加不加都不影响重载的运作。

(4) 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual

关键字,基类的函数将被隐藏(注意别与重载混淆)。

(5) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual

关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值