当前位置:  开发笔记 > 编程语言 > 正文

朋友类:继承类不是朋友吗?

如何解决《朋友类:继承类不是朋友吗?》经验,为你挑选了2个好方法。

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

我看起来像继承的B类不是A类的朋友.

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

这是一个例子.编译时,我收到一行"返回新纪念品"的错误:

纪念品::纪念品:无法访问纪念品中宣布的私人会员.

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的朋友,这是我想要避免的.

任何的想法 ?



1> Martin York..:

请参阅:C++中的朋友范围
投票完全相同.

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

正确

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

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



2> sth..:

友谊不是继承的,你必须明确地声明每个朋友的关系.(另见" 友谊不是遗传,传递或互惠 ")

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有