C ++では、クラスBと友達のクラスAがあります。
Bの継承されたクラスはクラスAの友達ではないようです。
私はこれがC++の制限ですか、それとも私の間違いですか?
これが例です。コンパイルすると、「returnnewMemento」という行でエラーが発生します。
Memento :: Memento:Mementoで宣言されたプライベートメンバーにアクセスできません。
class Originator;
class Memento
{
friend class Originator;
Memento() {};
int m_Data;
public:
~Memento() {};
};
class Originator
{
public:
virtual Memento* createMemento() = 0;
};
class FooOriginator : public Originator
{
public:
Memento* createMemento()
{
return new Memento; // Impossible to access private member of Memento
}
};
void main()
{
FooOriginator MyOriginator;
MyOriginator.createMemento();
}
もちろん、FooOriginatorをMementoの友達として追加することもできますが、これは、Originatorが継承するすべてのクラスをMementoの友達として追加する必要があることを意味します。これは避けたいことです。
何か案が ?