繁体   English   中英

C ++调用正确的虚函数

[英]C++ calling the right virtual function

我遇到以下情况的问题:

 template<class T>
class A {
public: virtual int  f() { return 1; }
};

class BaseA : public A<BaseA> {};
class DerivedA : public BaseA, public A<DerivedA> {};

当我这样做时:

 BaseA* b1 = new DerivedA;
b1->f();

它调用A<BaseA>::f()而不是A<DerivedA>::f() ,但我不知道如何解决。

OP的其他信息:这是一个家庭作业问题,可以自由更改A类,但不能更改BaseADerivedA类。

然后,以下是基于虚拟继承层次结构中的优势的一种解决方案:

#include <iostream>
#include <typeinfo>
using namespace std;

struct BaseA;

struct I
{
    virtual auto  f()
        -> int = 0;
};

template<class T>
class A
    : public virtual I
{
public:
    virtual auto  f()
        -> int override
    { cout << typeid( T ).name() << '\n'; return 1; }
};

template<>
class A<BaseA>: public virtual I {};

class BaseA : public A<BaseA> {};
class DerivedA : public BaseA, public A<DerivedA> {};

auto main() -> int
{
    BaseA* b1 = new DerivedA;
    b1->f();
}

以下程序从派生A调用f(输出:派生中的f)。 工作正常..这里有什么问题吗?

#include <iostream>
using namespace std;

template<class T>
class A
{
  public:
   virtual int f()
   {
       return 1;
   }
};

class BaseA : public A<BaseA>
{
  public:
  virtual int f()
  {
   cout << "f in base" << endl;
   return 1;
  }
};

class DerivedA :  public BaseA, public A<DerivedA>
{
   public:
   int f()
   {
       cout << "f in derived" << endl;
       return 1;
    }
};

main() {
    BaseA* b1 = new DerivedA;
    b1->f();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM