[英]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
類,但不能更改BaseA
和DerivedA
類。
然后,以下是基於虛擬繼承層次結構中的優勢的一種解決方案:
#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.