我有一個C++中的基類,它有一些受保護的成員變量(儘管我認爲它在這種情況下是受保護的而不是私有的)。子類數據的超類設置對象
我有一個從這個基類派生的派生類。其中有一個公共函數,它創建基類的一個對象並返回該對象。然而,在這個函數中,我需要能夠將受保護的成員變量設置爲特殊狀態。
實施例:
class Base
{
protected:
int b_value;
};
class Derived : public Base
{
public:
Base createBase()
{
Base b;
b.b_value = 10;
return b;
}
};
我特別只想派生類可以被保護的成員變量。我不想在基類中使用公共的訪問器方法。
我最初試圖通過使派生類的createBase()函數成爲Base類的朋友來解決這個問題。像這樣:
class Base
{
protected:
int b_value;
friend Base Derived::createBase();
};
class Derived : public Base
{
public:
Base createBase()
{
Base b;
b.b_value = 10;
return b;
}
};
正如您所見,由於Derived尚未定義,因此無法編譯。如果重要,這兩個類在單獨的頭文件中定義。我想一個方法來描述這個問題是一個「雞和蛋」問題,其中一個需要另一個。
我有一種感覺,這必須是「我沒有正確地設計我的類,需要重新思考我是如何做到這一點」,但我無法弄清楚如何讓這個工作。
前向聲明在這裏工作嗎?這兩個類在單獨的頭文件中定義。你需要在Base.hpp中包含「#include」Derived.hpp「'',它不會編譯。 –
@TLytle沒有關於前向聲明的事情,你不包括派生在基地.hpp中,而是使用前進,這將工作得很好。 –