C ++-为什么可以直接在Copy构造函数中访问传递的对象的私有变量?

惯性无知
class IntVec
{
public:
     IntVec();
     IntVec(int siz);
     IntVec(const IntVec& temp);

     ~IntVec();

private:
       int* arr;

       int size;
};

IntVec::IntVec()
{
    size = 2;

    arr = new int[size]; 
}

IntVec::IntVec(int siz)
{
    size = siz;

    arr = new int[size];
}

IntVec::IntVec(const IntVec& temp)
{
    size = temp.size; // Why does this not cause an error?  size is a private variable of object temp.

    arr = new int[size];

    for (int i = 0; i < size; i++)
    {
        arr[i] = temp.arr[i]; // Why doesn't this cause an error?  arr is a private variable of object temp.
    }
}

IntVec::~IntVec()
{
    delete[] arr;
}

int main()
{
    IntVec test1(2);

    cout << test1.size; // Causes error (expected), since size is private.
}

我不清楚为什么我可以在复制构造函数中访问temp的大小和arr变量,因为它们是私有变量。为什么在main()中出现错误是有道理的,但是我不确定为什么在复制构造函数中没有出错。

iBug

这是因为访问说明符每个类有效,而不对每个对象有效因此,类方法可以访问该类任何实例的私有成员

类的所有成员(成员函数的主体,成员对象的初始化程序以及整个嵌套的类定义)都可以访问类可以访问的所有名称。成员函数中的本地类可以访问成员函数本身可以访问的所有名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++-为什么默认构造函数即使在私有继承中也可以工作

来自分类Dev

在C ++中访问模板类的私有构造函数

来自分类Dev

如何启用朋友类的朋友功能直接在C ++中访问其私有成员

来自分类Dev

主函数中的 C++ 私有变量访问

来自分类Dev

为什么在C ++中使用私有副本构造函数与已删除副本构造函数

来自分类Dev

传递对象的C ++私有变量

来自分类Dev

为什么我不能直接在C#中传递RoutedEventHandler

来自分类Dev

使用C ++中的shared_ptr从公共静态成员函数访问私有构造函数

来自分类Dev

在C#中是否可以强制私有函数只能从构造函数中调用?

来自分类Dev

在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

来自分类Dev

在C#中的抽象类中,私有构造函数有什么用?

来自分类Dev

为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

来自分类Dev

如何从内部类中访问私有构造函数?C++14

来自分类Dev

C ++中的静态构造函数?我需要初始化私有静态对象

来自分类Dev

为什么 C++ 模板类可以访问其基类的私有成员?

来自分类Dev

为什么函数参数可以在C中包含地址或变量

来自分类Dev

当您可以直接将指针传递给C函数时,为什么要使用memcpy()?

来自分类Dev

仍然可以从C#中的另一个类访问私有变量

来自分类Dev

C ++为什么变量是函数而不是对象?

来自分类Dev

从私有void函数c#中的另一个类访问变量

来自分类Dev

从C ++中的私有模板类继承构造函数

来自分类Dev

为什么甚至可以更改私有成员或使用反射在C#中运行私有方法?

来自分类Dev

抽象类可以在C ++ 11中具有构造函数和私有成员吗

来自分类Dev

当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

来自分类Dev

C ++ 11私有默认构造函数

来自分类Dev

为什么C ++构造函数不能添加新的成员变量?

来自分类Dev

为什么C#不像C ++ / CLI那样直接在托管堆中修改字段?

来自分类Java

为什么我可以在equals(Object o)方法中直接访问“其他”对象的私有变量

来自分类Dev

访问在 C++ 中类的构造函数中创建的对象

Related 相关文章

  1. 1

    C ++-为什么默认构造函数即使在私有继承中也可以工作

  2. 2

    在C ++中访问模板类的私有构造函数

  3. 3

    如何启用朋友类的朋友功能直接在C ++中访问其私有成员

  4. 4

    主函数中的 C++ 私有变量访问

  5. 5

    为什么在C ++中使用私有副本构造函数与已删除副本构造函数

  6. 6

    传递对象的C ++私有变量

  7. 7

    为什么我不能直接在C#中传递RoutedEventHandler

  8. 8

    使用C ++中的shared_ptr从公共静态成员函数访问私有构造函数

  9. 9

    在C#中是否可以强制私有函数只能从构造函数中调用?

  10. 10

    在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

  11. 11

    在C#中的抽象类中,私有构造函数有什么用?

  12. 12

    为什么我们需要一个默认的构造函数来在C ++中通过引用传递对象?

  13. 13

    如何从内部类中访问私有构造函数?C++14

  14. 14

    C ++中的静态构造函数?我需要初始化私有静态对象

  15. 15

    为什么 C++ 模板类可以访问其基类的私有成员?

  16. 16

    为什么函数参数可以在C中包含地址或变量

  17. 17

    当您可以直接将指针传递给C函数时,为什么要使用memcpy()?

  18. 18

    仍然可以从C#中的另一个类访问私有变量

  19. 19

    C ++为什么变量是函数而不是对象?

  20. 20

    从私有void函数c#中的另一个类访问变量

  21. 21

    从C ++中的私有模板类继承构造函数

  22. 22

    为什么甚至可以更改私有成员或使用反射在C#中运行私有方法?

  23. 23

    抽象类可以在C ++ 11中具有构造函数和私有成员吗

  24. 24

    当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

  25. 25

    C ++ 11私有默认构造函数

  26. 26

    为什么C ++构造函数不能添加新的成员变量?

  27. 27

    为什么C#不像C ++ / CLI那样直接在托管堆中修改字段?

  28. 28

    为什么我可以在equals(Object o)方法中直接访问“其他”对象的私有变量

  29. 29

    访问在 C++ 中类的构造函数中创建的对象

热门标签

归档