指向基类的指针以及如何确定实例的实际类型

时间:2011-12-03 07:30:02

标签: c++ oop

我遇到了问题,我不确定如何在C ++中处理它;

我有三个对象,每个对象可以执行许多不同的操作。这些对象支持一个附加对象,该对象可以添加到它们可以执行的操作中。根据添加的对象,添加将启用不同的操作。

我将如何在C ++中对此进行建模?

我想要A,B,C,AddOn1,AddOn2等课程。

问题是:

AddOn1 / 2如何在运行时知道它包含哪些操作(换句话说,它如何知道它附加到的对象的类型)?

A,B,C类如何知道它有哪种类型的附加组件?

我想做点什么

A级{ ... AddOn * addOn; };

并使用该指针处理加载项。但是我需要将它转换为特定的类才能使用它的功能。

我可以看到如何使用像hasAddOn1和hasAddOn2这样的布尔字段并根据这些设置进行强制转换。然后在AddOn基类中,我可以有一个指向其父级的指针,并询问父级以找出AddOn的类型。

这有意义吗?

1 个答案:

答案 0 :(得分:2)

  

我有三个对象,每个对象可以执行许多不同的操作。这些对象支持一个附加对象,该对象可以添加到它们可以执行的操作中。根据添加的对象,添加将启用不同的操作。

为什么不使用继承和模板?

struct A {
  virtual void action_foo(); // virtual not really needed in this example
};

struct B {
  virtual void action_bar();
};

template<class base_t>
struct AddOn1 : base_t {
  virtual void action_baz();
};

void func(A& a) {
  a->action_foo();
}

// example of use

A x;
B y;
AddOn1<A> z; // add on to A
x.action_foo();
y.action_bar();
z.action_baz();
func(x);
func(z);
相关问题