本文为博主原创文章,未经博主允许不得转载。
https://blog.csdn.net/lxy_2011/article/details/52681596
一、今日课题
多重继承
二、实战演练
1)有何用?
C++多重继承一直是一个让人搞不太清楚的一个问题,但是有时候为了实现多个接口,多重继承是基本不可避免,当然在Windows下我们有强大的COM来帮我们搞定这个事情,不过如果你想自己实现一套类似于COM的东西出来的时候,麻烦事情就来了。
2)怎么用?
- 使用虚继承
会带来额外的时间和空间的开销,访问任何一个数据,都需要通过虚继承表进行跳转,不过一般来说够用了
- 虚函数当接口,继承多个接口,统一实现
这个思想就类似于COM了,只是说COM用的是纯虚函数,对于那些会产生二义性的类,我们在最后都实现一边,这样就不会有问题了。这样带来的时间开销也仅仅是调用时查询一次虚表。但是麻烦的地方就是,有时候继承一下,你可能就要实现一下了,比如引用计数神马的,当然你也可以通过模版来简化你的代码。
#include <iostream>
using namespac
e std;
class IBase
{
public:
virtual ~IBase(){}
virtual void show() = 0;
};
class IA :public IBase
{
public:
virtual ~IA() {}
virtual int inc() = 0;
};
class IB :public IBase
{
public:
virtual ~IB(){}
virtual int dec() = 0;
};
class CImpl :public IA, public IB
{
public:
CImpl() : n(0){}
virtual ~CImpl(){}
int inc() { return ++n; }
int dec() { return --n; }
void show() { cout << "n" << endl; }
private:
int n;
};
int main()
{
CImpl o;
IA *pA = &o;
IB *pB = &o;
pA->inc();
pA->show();
pB->dec();
pB->show();
system("pause");
return 0;
}
- 通过纯虚函数实现模版方法,将函数转移
3)前方高能
- 数据访问
- 二义性