【多态】动态多态与虚函数

多态:
父类指针或引用指向子类
动态多态:
当子类转换为父类(引用或指针)后,调用的仍是子类重写的方法。
利用虚函数用来完成此功能
来维护虚函数表,根据传入的子类跳到相应的子类的函数地址(晚绑定)

#include<iostream>
#include<cstdio>
using namespace std;
class A{
	public:
		// 虚函数 
		virtual void func(){
			cout<<"A的func()"<<endl; 
		}
};
class B:public A{
	public:
		void func(){
			cout<<"B的func()"<<endl; 
		}
};

// 地址晚绑定 (在运行时确定函数地址) 
void f(A &a){
	a.func();	// 向上转化 子类默认向父类转化 
}

int main(){
	B b = B();
	f(b);	// 子类的引用 调用 父类的方法 
	B b2 = B();
	A *p_b2 = &b2;	// 父类指针 指向 子类 (其虚函数指针仍然指向了B::func) 
	p_b2->func();
	cout<<sizeof(A)<<endl;	// 虚函数指针(指向了自己的虚函数表::A::func) 
	cout<<sizeof(B)<<endl;  // 虚函数指针(指向了自己的虚函数表::B::func) 
	
	int a;
	int *p = &a;
	cout<<sizeof(p)<<endl;	// 指针的大小 
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值