jww*_*jww 0 c++ inheritance composition
我有6个类,它们都执行相同的操作.我想将常见行为转移到一个共同的[基础]类.
要对6个单独的对象执行操作.六个对象位于派生类中.直观地,私有成员对象将通过基类中的子(派生类)进行访问.
我在寻找什么是C++模式?
class Base
{
// Common behavior, operate on m_object
...
void Foo()
{
m_object.Bar();
}
};
class Derived1 : public Base
{
// No methods, use Base methods
private:
MyObject1 m_object;
}
class Derived2 : public Base
{
// No methods, use Base methods
private:
MyObject2 m_object;
}
Run Code Online (Sandbox Code Playgroud)
这是拳击我到这种情况的事情是MyObject1,MyObject2等报价Bar(),但不共享一个共同的基类.我真的无法修复派生,因为对象来自外部库.
如果它们是在派生类中引入的,则基类不能直接访问它们.基类如何知道所有派生类都有特定的成员?
您可以使用虚拟保护方法,如下所示:
class my_base
{
protected:
virtual int get_whatever();
virtual double get_whatever2();
private:
void process()
{
int y = get_whatever();
double x = get_whatever2();
//yay, profit?
}
}
class my_derived_1 : my_base
{
protected:
virtual int get_whatever()
{
return _my_integer;
}
virtual double get_whatever2()
{
return _my_double;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种可能性(如果你想从派生类调用基本方法)是简单地为基本方法提供参数.
class my_base
{
protected:
void handle_whatever(int & arg);
};
class my_derived : my_base
{
void do()
{
my_base::handle_whatever(member);
}
int member;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |