【问题标题】:C++ Inheritance, calling a derived function from the base classC++继承,从基类调用派生函数
【发布时间】:2011-01-08 04:13:16
【问题描述】:

如何从基类调用派生函数?我的意思是,能够将一个函数从基类替换为派生类。

例如

class a
{
public:
   void f1();
   void f2();
};

void a::f1()
{
   this->f2();
}

/* here goes the a::f2() definition, etc */

class b : public a
{
public:
   void f2();
};

/* here goes the b::f2() definition, etc */    

void lala(int s)
{
  a *o; // I want this to be class 'a' in this specific example
  switch(s)
  {
   case 0: // type b
     o = new b();
   break;
   case 1: // type c
     o = new c(); // y'a know, ...
   break;
  }

  o->f1(); // I want this f1 to call f2 on the derived class
}

也许我采取了错误的方法。任何关于不同设计的评论也将不胜感激。

【问题讨论】:

    标签: c++ inheritance function class


    【解决方案1】:

    在基类中声明 f2() virtual。

    class a
    {
    public:
           void f1();
           virtual void f2();
    };
    

    然后,每当派生类覆盖f2() 时,将根据指针指向的实际对象的类型而不是指针的类型调用来自最派生类的版本。

    【讨论】:

    • 谢谢,现在我知道“虚拟”的东西是什么了...:D
    • 实际上,虚拟是使 C++ 中真正的 OOP 成为可能的特性。
    • 是的,好吧...至少它的继承部分... imio(在我无知的观点中),OOP 仍然是实用的仅使用组合...
    • @huff:是的。就 OOP 而言,virtual 并不完全是启用习惯用法。 virtual 使多态成为可能,这是 OOP 的一部分。
    【解决方案2】:

    将 f2() 声明为 virtual

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-08
      • 2010-10-05
      • 1970-01-01
      • 2021-04-20
      • 2016-07-03
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多