虚拟继承:virtual

本文探讨了C++中的虚函数和虚基类的概念及其作用。虚函数使得通过基类指针能够调用派生类的成员函数,确保调用的是对象实际类型的方法。虚基类解决了同名函数冲突的问题,并详细阐述了如何使用virtual关键字来实现这一功能。同时,文章提到了虚函数在内存管理和防止内存泄漏中的重要性,特别是对于基类析构函数声明为虚函数的必要性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

在这里插入图片描述
当出现同名函数时,需要用到virtual,这样的话,就相当于取最新的那个。
虚函数及时在原来的定义函数前加virtual

//虚基类的做法,出现成员函数同名时用这个
class A{
void test(){
cout<<"A";
}
class B:public virtual A{
void test()
{
cout<<"B";
}
}
//虚函数的做法,出现有公用爷类的用这个
class A{
virtual void test(){
cout<<"A";
}
class B:public  A{
void test()
{
cout<<"B";
}
}

A*p=new B();//生成一个指针,这个指针指向B的一个对象
有了virtual后,p->test();输出的就是B了
这就是virtual的作用:根据对象的实际类型,调用相应的类型函数。
如果没有virtual,那么p->test();输出的就是A了

没有virtual时,p指向test函数,那么调用的是父类的还是子类的呢?
在没有virtual的情况下,可以有两种不同的解释:
1.指针p的类型是A的*
2.指针p指向的对象是B
那么实际结果上面已经说了,是输出A

注意:
1.在父类中将函数声明为virtual,自类就自动是virtual了,当然你要两个地方都加virtual也可以。
2.即将被重写的函数添加virtual,是一条应该遵守的编码习惯
3.基类指针指向派生类对象,只能调用基类成员,但通过虚函数可调用派生类成员(原因在“基类指针指向派生类对象”那一篇文章可见)
4.当通过基类指针删除派生类对象时候。大多数基类都至少有一个虚函数,因此,大多数情况下,在存在继承关系且基类有虚函数的时候,往往需要将基类的析构函数声明为virtual,这样做的目的是避免内存析构
5.虚析构函数防止内存泄漏
6.构造函数不加virtual
(这些在后面都会出文章讲解的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值