访问具有基类对象的派生类

Access derived class having base class object

本文关键字:派生 对象 基类 访问      更新时间:2023-10-16

这是我的问题:

class A {
public:
   int foo;
   void setFoo(val) { foo = val; }
};
class B1 : public A {
public:
   void foo();
}
class B2 : public A {
public:
   void bar();
}
int main()
{
   A obj;
   switch(t) // some menu
   {
   case '1':
      obj.setFoo(something);
   case '2':
      obj.foo();
   case '3':
      obj.bar();
   }
   return 0;
}

开关处于一段时间循环中 - 这是某种菜单。 第一个案例首先运行。

问题是情况 2 和 3。 obj 是基类的实例,所以我无法访问这些方法。

我该如何解决这个问题?

为两个派生类创建两个不同的对象不起作用,因为我必须在它们上使用 setFoo() 方法,而且它不再是相同的属性。

您应该在基类中将此函数声明为虚拟函数,或者在基类中声明它们。