基类方法的接口
Interface to base class method
对于下面的代码,有没有其他方法可以通过接口访问base中的方法?
struct Base {
void funct_base() {
printf("Common function for class Foo and class Barn");
}
};
struct IFoo {
virtual ~IFoo() {}
virtual void funct_a() = 0;
// would like to access Base::bunct_base() from here
};
struct Foo : public Base, public IFoo {
virtual void funct_a() {
printf("I am Foo:: funct An");
}
};
class IBar {
virtual ~IBar() {}
virtual void funct_a() = 0;
// would like to access Base::bunct_base() from here
};
class Bar : public Base, public IBar {
virtual void funct_a() {
printf("I am Bar:: funct An");
}
};
我知道这是可以做到的,但我只是不喜欢包装,它看起来不干净:
struct IBar {
virtual ~IBar() {}
virtual void funct_a() = 0;
virtual void funct_base() = 0;
};
struct Bar : public Base {
virtual void funct_a() {
printf("I am Bar:: funct An");
}
virtual void funct_base() {
Base::funct_base();
}
};
编辑:
问题是,有一个基类和两个从同一基类继承的不同派生类。有没有一种方法可以在不添加基类方法包装器的情况下通过派生类接口访问基类方法?
使用抽象基类IBase
和抽象方法funct_base
,并使接口类成为类Base
、IFoo
和IBar
的虚拟基类:
struct IBase {
virtual void funct_base() = 0;
};
struct Base : public virtual IBase {
virtual void funct_base() override { printf("Common function for class Foo and class Barn"); }
};
struct IFoo : public virtual IBase {
virtual void funct_a() = 0;
};
struct Foo : public IFoo, public Base {
virtual void funct_a() override { printf("I am Foo:: funct An"); }
};
class IBar : public virtual IBase {
virtual void funct_a() = 0;
};
class Bar : public IBar, public Base {
virtual void funct_a() override { printf("I am Bar:: funct An"); }
};
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我们可以通过在C++中的类中使用关键字“abstract”使所有方法抽象来声明接口类吗
- 通过抽象模板基类接口指针访问派生类方法,而无需在接口中显式类型
- 基类方法的接口
- 企业架构师 - 从类图中的接口继承方法
- 使用继承接口的类的子类方法
- 在C++中使用带有接口类的实现的正确方法是什么
- 如何在c++ Builder中解决接口方法和基类方法名称冲突?