如何使派生类访问私有成员数据
How to make a derived class access the private member data?
我遇到了一个 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.
}
派生类无法访问其基类的私有成员。 任何类型的继承都不允许访问私有成员。
但是,如果您使用friend
声明,则可以这样做。
没有
其他方法可以访问其他班级的私人数据,然后友谊。但是,对于继承,您可以做的是访问基类的受保护数据。但这并不意味着您可以访问基类型的另一个对象的受保护数据。只能访问派生类的基部分的受保护数据:
class base{
protected: //protected instead of 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(3);
//temp->ptr1 = 0; //you need friendship to access ptr1 in temp
this->ptr1 = 0; // but you can access base::ptr1 while it is protected
}
int main(){}
尝试在基类中将保护作为访问说明符,并在私有模式下继承基类.....但是为了进一步使用基类 U 的成员函数,可能需要一些短的内联函数,因为它们也将转换为 private
好吧,我认为,您正在尝试实现这样的结果!!这不会报告任何编译器错误等。祝你好运!!!
class base{
private:
base *ptr1;
int data;
public:
base(){}
base(int d) { data=d; }
base* getPtr(); //getter to get access to base pointer
void setPtr(base* val); // setter to set value of the pointer variable
};
base* base::getPtr()
{
return ptr1;
}
void base::setPtr(base* val)
{
ptr1 = val;
}
class derived:private base{
private:
base* getPtr();
void setPtr(base* val);
public:
void member();
};
base* derived::getPtr()
{
return base::getPtr(); //derived version just invokes the base class version
}
void derived::setPtr(base* val)
{
base::setPtr(val); //derived version just invokes the base class version
}
void derived::member()
{
base *temp=new base(5); //put in a random number here instead of val
temp -> setPtr(nullptr);
}
我不同意其他一些答案,声称访问私有成员的唯一方法是使其成为friend
。
您可以通过私有成员在内存中的地址直接访问该成员。如果你对它感到满意,那就是。可以在基类中有一个返回私有成员地址的函数,然后在派生类中使用一些包装函数来检索、取消引用和设置私有成员。
相关文章:
- 嵌套在类中时无法设置成员数据
- 私有成员数据不可用于公共成员功能
- 我想知道我是否可以将一个类分配给特定的成员数据并创建该类的实例
- 类的成员数据未更新
- 为什么类成员数据必须是静态的才能被模板化类的模板化结构成员访问
- C++:成员不可访问-使用友元函数允许一个类修改另一个类的成员数据
- 如何高效更改向量中所有对象的成员数据?
- constexpr 偏移量,带有指向成员数据的指针
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- C++ 类析构函数删除部分但不是全部成员数据
- 初始化 MFC 中 CFormView 派生类的成员数据
- 覆盖复制/移动分配超载时,我是否需要删除当前的成员数据
- 根据参数设置构造函数的成员数据类型
- 对齐说明符:在类型 / 上 成员数据
- 如何实现ressize()以更改C 中动态成员数据的能力
- C++ 阻止复制成员数据
- 什么是成员数据指针的正确赋值语句
- C++ 在类中使用 strcmp() 处理私有成员数据
- 成员数据在stack实例上覆盖
- 初始化继承的成员数据