gpt4 book ai didi

c++ - friend 类 : inherited classes are not friend as well?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:12 26 4
gpt4 key购买 nike

在 C++ 中,我有一个类 A,它是类 B 的友元。

我看起来 B 的继承类不是 A 类的友元。

这是 C++ 的限制还是我的错误?

这是一个例子。编译时,“return new Memento”行出现错误:

Memento::Memento:无法访问在 Memento 中声明的私有(private)成员。

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 的友元,这是我想避免的事情。

有什么想法吗?

最佳答案

参见:Friend scope in C++
投票完全重复。

I looks like inherited classes of B are not friend of class A.

正确

I this a limitation of C++ or my mistake ?

这就是 C++ 的工作方式。我不认为这是一种限制。

关于c++ - friend 类 : inherited classes are not friend as well?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/491000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com