簡體   English   中英

從Abstract Base Class訪問另一個Base Classes成員

[英]Access another Base Classes member from Abstract Base Class

我想知道是否有可能在類AbstractBase聲明一個純虛函數並使DerivedBase類成員可見,因此它將使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM