关于多基类派生的歧义性问题

mountlin mountlin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如下:
class B1
{
DWORD m_dwRef;
...
};

class B2
{
DWORD m_dwRef;
...
};

template < class T >
class DT : public T
{
DT()
{
m_dwRef = 1;
}
}

class D : public B1, public B2
{
...
}

DT< D > d;

这样因为m_dwRef的歧义无法编译通过。在DT::DT()中使用的m_dwRef应该是B1::m_dwRef,但是由于B1、B2、DT都是某些库的函数,不能修改,那么怎样解决这个问题?
我现在是用重新定义DT(把库里的整个定义和实现全部复制到我的程序里,再把m_dwRef改成B1::m_dwRef),但显然这方法太笨了。#define m_dwRef B1::m_dwRef我也想过,但由于DT和m_dwRef被引用很多,容易造成混乱。请问各位高手,还有没有更好的办法?
...全文

相关推荐

详解C++中基类与派生类的转换以及虚基类

C++基类与派生类的转换 在公用继承、私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员。因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现。而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用基类的公用成员函数访问基类的私有成员)。因此,只有公用派生类才是基类真正的子类型,它完整地继承了基类的功能。 不同类型数据之间在一定条件下可以进行类型的转换,例如整型数据可以

weixin_38501826

C++派生类与基类的转换规则

只有公用派生类才是基类真正的子类型,它完整地继承了基类的功能。基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象的时候可以用其子类对象代替。 具体表现在以下几个方面: 派生类对象可以向基类对象赋值。 可以用子类(即公用派生类)对象对其基类对象赋值。如 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对象b1 a1=b1; //用派生类B对象b1对基类对象a1赋值 在赋值时舍弃派生类自己的成员。 实际上,所谓赋值只是对数据成员赋值,对成员函数不存在赋值问题。请注意: 赋值后不能企图通过对象a1去访问派

weixin_38681218

在派生类的构造函数中调用基类的构造函数

《Visual C++2012入门经典(第6版)》实例,在派生类的构造函数中调用基类的构造函数

王群 - 电子工业出版社

基类,派生类

基类,派生类

pp25210

C++基类指针和派生类指针之间的转换方法讲解

函数重载、函数隐藏、函数覆盖 函数重载只会发生在同作用域中(或同一个类中),函数名称相同,但参数类型或参数个数不同。 函数重载不能通过函数的返回类型来区分,因为在函数返回之前我们并不知道函数的返回类型。 函数隐藏和函数覆盖只会发生在基类和派生类之间。 函数隐藏是指派生类中函数与基类中的函数同名,但是这个函数在基类中并没有被定义为虚函数,这种情况就是函数的隐藏。 所谓隐藏是指使用常规的调用方法,派生类对象访问这个函数时,会优先访问派生类中的这个函数,基类中的这个函数对派生类对象来说是隐藏起来的。 但是隐藏并不意味这不存在或完全不可访问。通过 b->Base::func()访问基类中被隐藏的函数。

weixin_38659648
评论 15
收藏 已收藏
分享
返回顶部
mountlin
C++ 语言 65,214 成员 250,514 内容