通常继承的基类的唯一实例
Unique instance of a commonly inherited base class
我有以下类结构:
class Common {
//members and data here.
};
class Derived1 : public Common
{
};
class Derived2: public Common, public Derived1
{
};
据我所知,Derived1
和Derived2
都将共享来自Common
的任何成员。有没有办法在Derived2
中取消Derived1
的私有化,以允许Derived2
仍然继承Common
,但具有单独的函数重写。基本上,我需要覆盖Derived1
和Derived2
中的一个虚拟函数,但仍然要运行Derived1
的函数(它是一个线程api)。得到任何帮助。
@Walkerneo指出,您不需要同时继承Common和Derived1。您可以简单地从Derived1继承,也可以从Common继承。您可以通过执行以下操作从Derived2的方法显式调用Derived1的方法:
void Derived2::overriddenMethod ()
{
// Do something unique here
Derived1::overriddenMethod ();
// Maybe do some more stuff
}
即使使用单一继承也可以实现这一点:
struct Base
{
virtual void foo() = 0;
virtual ~Base() { }
};
struct Intermediate : Base
{
virtual void foo() { /* ... */ }
// ...
};
struct Derived : Intermediate
{
virtual void foo()
{
Intermediate::foo();
// new stuff
}
};
您是否尝试过将虚拟函数用于运行时多态性并将Derived2
类的变量分配给Derived1
类的指针
class Common {
//members and data here.
public:
virtual void commonFunction() = 0; //keeping it pure virtual
};
class Derived1 : public Common
{
virtual void commonFunction(){
//do something in derived1
}
};
class Derived2: public Common, public Derived1
{
void commonFunction(){
//do something in derived2
}
};
int main(){
Derived2 derived2;
Derived1 *derived1;
derived1 = &derived2;
derived1->commonFunction(); //calls the common function definition in Derived1
/* ... */
}
相关文章:
- std::具有相同基类的类的变体
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 基类中的函数名称解析
- C++初始化基类
- 如何通过派生类函数更改基类中的向量
- 如何定义一个纯抽象基类
- 如何使用基类指针引用派生类成员
- 为什么允许dynamic_cast到非唯一的基类类型?
- 指向基类的唯一指针
- 从基类的唯一指针中声明派生类的类型
- C :模板类别的唯一_ptr多态性,该类别从非模板基类得出
- 基类的指针数组:如何调用唯一的派生类方法
- 如何从基类的唯一指针获取子类的成员
- 转换为唯一基类指针的向量
- 通常继承的基类的唯一实例
- 具有基类唯一ptr的类的复制构造函数
- 通过基类容器访问派生类唯一变量的最佳方式
- 如何初始化基类中的唯一变量(继承)
- 从基类对象的指针向量调用派生类的唯一函数