Virtual的两个用法

1.virtual用在继承的时候 虚继承

#include <iostream>
using namespace std;

class A
{
	public:
	int m_a;
	A();
	virtual void print();
};
A::A()
{
	print();
}
void A::print()
{
	cout<<"this is A"<<endl;
}

class B:virtual public A
{
	public:
	int m_b;
	void print();
};
void B::print()
{
	cout<<"this is B"<<endl;
}
int main()
{
	/*A a;
	B b;
	cout<<sizeof(a)<<endl;
	cout<<sizeof(b)<<endl;
	cout<<&a<<endl;
	cout<<&a.m_a<<endl;   //+4 其中有个虚函数表指针*/
	B b;
	//A *pa=&b;
	cout<<sizeof(b)<<endl;
	cout<<&b<<endl;
	cout<<&b.m_b<<endl;
	cout<<&b.m_a<<endl;
	
	return 0;
}

   之所以隔了8,只因为m_b和m_a中间还有个虚指针;

 

2.虚函数

#include<iostream>
using namespace std;
class A
{
	public:
	virtual void print()
	{
		cout<<"AA"<<endl;
	}
};
class B:public A
{
	public:
	void print()
	{
		cout<<"BB"<<endl;
	}
};
int main()
{

	A *pa=new A;
	pa->print();
	A *pb=new B;  
	pb->print();// 没加virtual:AA 加virtual:BB 
	cout<<pa<<"  "<<pb<<endl;
    delete pa;
    delete pb;
	return 0;
}

由于加了virtual pb直接调用B的print();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值