19.理解虚基类虚继承

Posted 为了财务自由!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19.理解虚基类虚继承相关的知识,希望对你有一定的参考价值。

抽象类:有纯虚函数的类

virtual:
修饰成员方法是虚函数
可以修饰继承方式,是虚继承。被虚继承的类,叫做虚基类!


如果不是虚继承,那么内存分配:
A::ma
mb
如果虚继承的话:
vbptr
mb
A::ma


0:向上的偏移量!
8:到虚基类数据的偏移量!

class A

public:
	virtual void func()  cout << "call A::func" << endl; 
	void operator delete(void *ptr)
	
		cout << "operator delete p:" << ptr << endl;
		free(ptr);
	
private:
	int ma;
;
class B : virtual public A

public:
	void func()  cout << "call B::func" << endl; 

	void* operator new(size_t size)
	
		void *p = malloc(size);
		cout << "operator new p:" << p << endl;
		return p;
	
private:
	int mb;
;

以上是关于19.理解虚基类虚继承的主要内容,如果未能解决你的问题,请参考以下文章

理解虚基类多重继承的问题

C++中的各种“虚“-- 虚函数纯虚函数虚继承虚基类虚析构纯虚析构抽象类讲解

C++中的各种“虚“-- 虚函数纯虚函数虚继承虚基类虚析构纯虚析构抽象类讲解

深入C++07:处理多继承的坑

C++ 虚基类

虚基类&虚继承