[英]polymorphism c++, trying to access member functions of classes that are derived from abstract base class
[英]Access another Base Classes member from Abstract Base Class
我想知道是否有可能在類AbstractBase
聲明一個純虛函數並使Derived
的Base
類成員可見,因此它將使用Base
的成員而不在Derived
查找實現。 到目前為止,我嘗試通過嘗試使用using
來使Base
的成員可視化但是它不會編譯,因為查找,在這種情況下,似乎忽略使用。 這有可能嗎? 這是我的代碼:
#include <iostream>
using namespace std;
class AbstractBase {
public:
AbstractBase(){}
virtual ~AbstractBase(){}
protected:
virtual void f() = 0;
};
class Base {
public:
Base(){}
protected:
void f() {cout << "called Base's f()" << endl;}
};
class Derived : public Base, public AbstractBase {
public:
Derived(){}
//using Base::f; /*this won't compile*/
private:
void f(){} /*Access Base's f() here rather than implement*/
};
int main()
{
Derived d;
}
使用::
運算符:
class Derived : public Base {
public:
Derived(){}
private:
void f(){ Base::f() }
};
此外,您不需要從AbstractBase
繼承。
在我看來,您希望f()
是純虛擬的,但提供默認實現。 在這種情況下,可以通過這種方式實現:
#include <iostream>
using namespace std;
struct AbstractBaseWithDefaultF
{
virtual ~AbstractBaseWithDefaultF() = default;
virtual void f() = 0;
};
void AbstractBaseWithDefaultF::f()
{
cout << "called AbstractBaseWithDefaultF's f()" << endl;
}
struct Derived : AbstractBaseWithDefaultF
{
void f() override
{
AbstractBaseWithDefaultF::f();
cout << "called Derived's f()" << endl;
}
};
int main()
{
Derived d;
d.f();
}
輸出:
called AbstractBaseWithDefaultF's f()
called Derived's f()
這是一個實時的Wandbox示例 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.