这是一个奇怪的问题,但我使用嵌套类在c ++中创建类似属性的功能。
我还通过使嵌套类的赋值运算符受到保护并使宿主类成为嵌套类的Friend
来使这些工作成为ReadOnly。
不幸的是,似乎任何继承类(使用: 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'
上收到错误答案 0 :(得分:5)
友善不是继承的。
目前尚不清楚最佳解决方案是什么;或许在基类的受保护部分声明嵌套类,并使其成员公开?这样就不需要友谊了,但是来自课程层次结构之外的东西将无法摆弄它。
答案 1 :(得分:0)
并且你把朋友声明放在哪个部分并不重要。
或许,相反,将内部类放在受保护的部分中,并使其接口公开。