虚函数简介

语法:在类中声明时,声明前用virtual关键字;后面函数实现时,不用加virtual;

作用:在一个基类指针指向其派生类对象时,使得该指针调用基类和派生类中同名函数时可以有不同的效果;

例:Base *b=new Derived();两个类中都有show函数;

若基类中show函数不是虚函数,派生类中show函数不是虚函数,则该指针调用的show函数是基类中的show函数;

若基类中show函数不是虚函数,派生类中show函数虚函数,则该指针调用的show函数是基类中的show函数;

若基类中show函数虚函数,派生类中show函数不是虚函数,则该指针调用的show函数是派生类中的show函数;

若基类中show函数虚函数,派生类中show函数虚函数,则该指针调用的show函数是派生类中的show函数;

总结:有一个虚函数时,虚函数被隐藏,调用另外一个同名函数;两个都是虚函数时,调用派生类同名函数;无虚函数时,调用指针的类型的类的虚函数;

可复制代码,通过增删基类和派生类中virtual来验证:

#include <bits/stdc++.h>
using namespace std;

class Base {

	public:
		virtual void f() {
			cout << "Base::f" << endl;
		}
		void g() {
			cout << "Base::g" << endl;
		}
};
class Derived:public Base {

	public:
		virtual void f() {
			cout << "Derived::f" << endl;
		}
		void g() {
			cout << "Derived::g" << endl;
		}
};
int main(void) {
	Derived d2;
	Base *b1=&d2;
	b1->f();
	return 0;
}

具体实现,是因为有虚函数表,可参考:

https://blog.csdn.net/lyztyycode/article/details/81326699

而虚函数的在实际工作中意义,可参考:

https://blog.csdn.net/Superman___007/article/details/106279246?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165071924616781435414803%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165071924616781435414803&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-106279246.142^v9^pc_search_result_cache,157^v4^new_style&utm_term=%E8%99%9A%E5%87%BD%E6%95%B0%E6%9C%89%E7%94%A8%E5%90%97&spm=1018.2226.3001.4187

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值