【发布时间】:2013-09-22 13:38:40
【问题描述】:
我遇到了一个 C++ 问题。我有一个基类,它在类的私有可见区域内有一个自引用对象指针。我在基类中有一个构造函数来初始化这两个指针。现在我有我的派生类,它的访问说明符是私有的(我想让我的基类的公共成员函数私有)。现在通过我的派生类的成员函数,我想创建一个对象指针,它可以指向基类的私有数据,即那些自引用对象指针。我的代码是:
class base{
private:
base *ptr1;
int data;
public:
base(){}
base(int d) { data=d }
};
class derived:private base{
public:
void member()
};
void derived::member()
{
base *temp=new base(val); //val is some integer
temp->ptr1=NULL; //I can't make this happen. To do this I had to declare all the
//private members of the base class public.
}
【问题讨论】:
-
使用
protected而不是private? -
为
private成员创建protectedgetter?但是,如果您需要这样的解决方案,通常您的设计就有缺陷。 -
那也行不通。编译器错误。也试过了。只有将其公开,我才能访问它。但这会使代码易受攻击。
-
protected是您所需要的(这就是protected的用途)。如果出现错误,还有其他问题。如果您希望人们更好地理解您的问题,请发布SSCCE 和错误。 -
不幸的是,这个问题是有缺陷的。您可能认为您想要或需要这样做;但你没有。不仅没有必要,而且有害。
class使用private属性进行封装;封装反过来意味着类可以维护其属性的不变量,并且状态的精确表示是隐藏以避免意外依赖。打破封装,你会打开一罐讨厌的蠕虫。
标签: c++