通过指针使用包含 class 数组访问 class 的成员数组 - class 对象的包含数组是私有的

Accessing member array of class using containing class array through pointer - contained array of class object is private

作为 class 成员,我有一个 class (obj) 的数组,我想创建 Box class 的数组(这是包含 class)并通过 Box class.

p 指针对象成员访问 xyz obj[5];

obj 数组是 private 但我想我可以使用指针访问它。我说得对吗?

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
class xyz{
public:
int x;
};
class Box {

   public:
      // Constructor definition
     
      Box ()
      { 
        cout<<"without constructot"<<endl;
      }
      xyz *p=obj;   
      
   private:
    xyz obj[5];
     
};
int main()
{

    Box b[5];;
    Box *p=&b[0];
    (b+2)->(obj)->x=5;
    //cout <<(b+2)->(obj)->x<<endl;     


}

(b+2)->(obj)->x=5;

抛出异常

这个

  error: expected unqualified-id before ‘(’ token
   28 |  (b+2)->(obj)->x=5;
      |         ^
    main.cpp:28:10: error: ‘obj’ was not declared in this scope      28 |  (b+2)->(obj)->x=5;
      |          ^~~

您的代码中存在许多问题。首先,我不确定您要使用 obj 周围的括号来完成什么,但是成员访问运算符 (->) 不是那样工作的——必须遵循 立即 成员姓名。

也许你想要的是这样的:( (b + 2)->obj )->x = 5;?但是,在这样的表达式中不需要外括号,因为 -> 具有从左到右的结合性(尽管为了清楚起见,您可以使用它)。

但是,即使进行了该修改,您仍然试图从 class 的定义之外访问 class 的 private 成员,这是不允许的。一般来说,如果成员是 private,那么您只能从 class.[=22= 的成员函数 (或友元函数)中访问它 ]

作为最后的观察:我不确定你为什么要使用 (b + 2) 而你可以只使用 b[2]。您是否要使用在上一行(如 (p + 2)->obj->x = 5; 中)分配了地址 b[0] 的指针 (p)?


作为脚注,我强烈建议您阅读以下 Stack Overflow 帖子:

  1. Why is "using namespace std;" considered bad practice?