假设我有我的课为:设置从另一个类只读属性
namespace scope
{
class A
{
private:
int a;
public:
...
};
class B
{
public:
...
A method();
...
};
};
的方法定义:
A B::method()
{
A object;
object.a = 3; // private member access error
// access via object (pointer) error if inheritance is used
return object;
}
解决访问错误最常见的方法是使用setter方法+干将。
但是我不希望(使用API或某人)设置A.a
任何其他范围,所以公共setter方法被用于这种情况下禁止。
a
可能是公开的但它应该在API端是只读的。在源端应该是读取+写入,因为,例如,我想将其设置为B::method
。 我该如何实现这种行为?
我试过继承,也是朋友关系。我还玩过immutable
和const
属性声明。这些问题是,当我使用默认构造函数声明A对象时,属性被设置为一些值,如-918316838410(这可能是因为我没有使用extern
,我不确定)并且无法设置通过method
稍后。
任何想法将不胜感激。提前致谢。
理念1,定义带有'int'的公共'explicit'构造函数的'A'。想法2,让'B'成为'A'的朋友。你说你尝试过“朋友”,但我怀疑你没有努力。 –
int的默认构造是未定义的值。 如果你想要别的东西,添加合适的构造函数。 (例如,设置好值的无参数构造函数,或者接受参数并使用它的int构造函数)。 至于显式,它不需要,但通常是一个arg构造函数的好主意,以避免无意的自动转换 – RichardPlunkett