gpt4 book ai didi

c++ - 如何从另一个派生类访问派生类的成员?

转载 作者:太空狗 更新时间:2023-10-29 23:19:23 25 4
gpt4 key购买 nike

我有一个父类,我有 2 个来自该父类的公共(public)派生类。例如。

                     class Parent
| |
| |
| |
class derived1 class derived2.

问题:我想从另一个派生类访问一个派生类的私有(private)成员。我该怎么做呢?

我现在的方式是这样的:将 cDerived1 对象作为参数传递给 cDerived2 的构造函数。如果我这样做,那么我必须将 cDerived2 声明为 cDerived1 的友元,并将 cDerived1.h 包含在 cDerived2.h 中

#include cParent.h
#include cDerived1.h
#include cDerived2.h

void main (){

// Instantiate a cDerived1 object
Derived1 dev1();

// Instantiate a cDerived2 object. The cDerived2 object will need access to the
// private members of cDerived1. So pass dev1 by reference to dev2 ctor.
Derived2 dev2(dev1);
}

这是正确的做法还是我在做一些非常明显的错误??

谢谢。

回应保罗的评论:我已经在父类中有共享代码,如下所示。

cParent.h
class cparent{

public:
// ctor
// dtor
protected:
int* pArr;
};

cDerived1.h
// derived1's header
#include "cParent.h"

class cDerived1 : public cParent{
public:
//
};


cDerived2.h
// derived2's header
#include "cParent.h"
class cDerived2 : public cParent{
public:
// I want access to derived1's pArr member over here....How do I do this ?

最佳答案

这就是关键字 friend 的用途。它可以用于函数或类……在这种情况下,您可以将它应用于类。您可以访问 protected 成员的唯一方法是通过继承......即一个子类,或者一个 friend 类。我很确定访问类外私有(private)成员的唯一方法是使用友元函数或类。这是来自 cplusplus.com 的相关链接

这是他们声明友元类的示例(他们的第二个)。

class CSquare {
private:
int side;
public:
void set_side (int a)
{side=a;}
friend class CRectangle; // here is the friend declaration
};

因此在您的示例中,您将使用:

friend class Derived1; // place in Derived2 

friend class Derived2; // place in Derived1

Derived 1 可以访问 Derived 2 私有(private)成员,Derived 2 可以访问 Derived 1 私有(private)成员。

我假设您不想简单地使用 getter 函数。

一旦它被声明为好友,您就可以使用:

Obj.theVar

而不是像这样使用 getter 函数:

Obj.getVar()

关于c++ - 如何从另一个派生类访问派生类的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com