【问题标题】:Nested Classes and Inheritance C++嵌套类和继承 C++
【发布时间】:2013-01-07 01:33:14
【问题描述】:

这是一个相当奇怪的问题,但我正在使用嵌套类在 c++ 中创建类似属性的功能。 我还通过使嵌套类的赋值运算符受保护并将宿主类设置为嵌套类的Friend,使这些工作成为只读。 不幸的是,似乎任何继承类(带有: public BaseClass)仍然无法访问嵌套类的赋值运算符。

我不知道这是否重要,但我确实将Friend 放在了班级的公共部分。

有人知道我该如何解决这个问题吗? (或破解)谢谢

编辑:添加代码示例

#define ReadOnlyProperty(type,name,parent) \
protected: \
class name : public PropertyBase<type> \
{ \
    parent* This; \
public: \
    friend class parent; \
    name(parent* instance) { This = instance; } \
protected: \
    void operator=(type value) {Set(value);} \
    void Set(type value); \
    type Get() const; \
}; \
public: name name; \
friend class name; \
private:

基类:

class Object
{
ReadOnlyProperty(char,Type,Object);

public:

Object() : Type(this) {}
};

继承类

class A : public Object
{
public:
A() {Type = 'A';}
};

我在 Type = 'A' 上遇到错误

【问题讨论】:

  • 你不能自动让所有继承的类成为朋友。如果您输入一段代码,我们可以看到一个好的解决方法可能是什么样的。

标签: c++ inheritance nested-class


【解决方案1】:

友善不是遗传的。

目前尚不清楚最佳解决方案是什么;也许在基类的受保护部分声明嵌套类,并将其成员公开?这样就不需要友谊了,但类层次结构之外的东西将无法摆弄它。

【讨论】:

  • 我通常不会赞成这样一个简短且不详细的答案,但有很多原因让这个问题值得回答 this 问题。我懒得一一列举。而且我知道你无论如何都认识他们。
  • +1 我真的很喜欢这样的答案。我不经常发布它们的唯一原因是,出于某种原因,人们喜欢阅读比他们需要的更多的单词,结果我的回答被否决了。
  • 好吧,这不是问题的答案(如何解决这个问题?)。但我认为,回答这个问题需要重新设计,所以没有直接的解决方案。有吗?
【解决方案2】:

你把朋友声明放在哪个部分都没有关系。

也许,相反,将内部类放在受保护的部分,并将其接口公开。

【讨论】:

  • 请写完整的句子。
  • 将类置于 protected 中没有效果。
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2017-06-22
相关资源
最近更新 更多