在C ++中进行受保护成员可访问性附加检查的原因是什么?

ZijingWu

我只是遇到了这个问题,并且从C ++标准知道将其定义如下(强调我的意思)

当非静态数据成员或非静态成员函数是其命名类(11.2)115的受保护成员时,将应用除第11章中所述的访问检查之外的其他访问检查。引用发生在某个类C的朋友或成员中。如果访问要形成指向成员(5.3.1)的指针,则嵌套名称说明符应表示C或派生自C的类。所有其他访问都涉及一个(可能是隐式的)对象表达式(5.2.5)。在这种情况下,对象表达式的类应为C或从C派生的类。

程式码片段:

class Base
{
protected: 
    int i;
};

class Derived : public Base
{
public:
    // I cannot define it as void memfunc(Derived* obj) because of signature requirement.
    void memfunc(Base* obj) 
    {
       obj->i = 0;  // ERROR, cannot access private member via Base*
       Derived* dobj = (Derived*)(obj);
       dobj->i = 0; // OK
    }
};

那么,进行此检查的原因是什么?为什么C ++标准需要通过基类指针来限制访问受保护的成员?

不重复:访问派生类中的受保护成员,我想询问禁止在标准中使用它的原因。

仅仅因为您从a派生,Base并不意味着您应该被允许访问任何其他派生自的类的受保护成员Base想象一下Derived2,由库提供的类继承自Base这样,您就可以获取的基础对象,Derived2并在的代码中对其进行任何处理Derived

因此,从根本上说,该标准可确保您只修改继承的受保护成员,并且不会弄乱无关兄弟姐妹类的完整性。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中访问分段错误的原因是什么

来自分类Dev

从C#应用程序中进行reg添加并从cmd窗口中查询值后,为何生成不同值的原因是什么?

来自分类Dev

C中这种狡猾的内存泄漏的原因是什么

来自分类Dev

C:这个浮点异常的原因是什么?

来自分类Dev

C++ 程序输出与预期不同的原因是什么?

来自分类Dev

受保护成员的可访问性

来自分类Dev

快速思考受C#保护的访问器的正确方法是什么?

来自分类Dev

C ++:无法从派生类访问受保护的成员

来自分类Dev

访问派生类 C++ 中的受保护成员

来自分类Dev

在C#中进行算术溢出检查的最佳实践是什么?

来自分类Dev

在C#中进行算术溢出检查的最佳实践是什么?

来自分类Dev

c#不一致的可访问性阻止将私有类作为受保护方法的参数

来自分类Dev

在java中进行强制转换的原因是什么?

来自分类Dev

C语言先增加后增加的历史原因是什么?

来自分类Dev

在C ++和Java中只有一个返回值的原因是什么?

来自分类Dev

使用open时会导致无限循环的原因是什么?(C,UNIX)

来自分类Dev

在这种情况下python比C慢得多的原因是什么?

来自分类Dev

有些人在目标C中使用GOTO语句的原因是什么?

来自分类Dev

C:数据类型。sqrt函数与int一起工作的原因是什么?

来自分类Dev

C程序中“异常程序终止”错误的可能原因是什么?

来自分类Dev

在 C++ 中使用 upcasting 和 downcasting 的原因是什么?

来自分类Dev

C ++如何为同一成员创建公共和受保护的访问器

来自分类Dev

如何限制受保护成员只能从第一级子级C#访问

来自分类Dev

C ++如何为同一成员创建公共和受保护的访问器

来自分类Dev

从与C#的类(局部类)后面的代码不同的程序集中的类访问受保护的成员

来自分类Dev

Java中在haskell中进行映射或在C#中进行选择的等效方法是什么?

来自分类Dev

为什么C ++中的派生类的朋友不能使用受保护的成员?

来自分类Dev

为什么即使在C ++ 20中std :: memcpy也不能成为constexpr的原因是什么?

来自分类Dev

如果目录可以访问列表文件或出现未经授权的访问异常,那么在C#.NET中进行检入的最佳方法是什么

Related 相关文章

  1. 1

    C中访问分段错误的原因是什么

  2. 2

    从C#应用程序中进行reg添加并从cmd窗口中查询值后,为何生成不同值的原因是什么?

  3. 3

    C中这种狡猾的内存泄漏的原因是什么

  4. 4

    C:这个浮点异常的原因是什么?

  5. 5

    C++ 程序输出与预期不同的原因是什么?

  6. 6

    受保护成员的可访问性

  7. 7

    快速思考受C#保护的访问器的正确方法是什么?

  8. 8

    C ++:无法从派生类访问受保护的成员

  9. 9

    访问派生类 C++ 中的受保护成员

  10. 10

    在C#中进行算术溢出检查的最佳实践是什么?

  11. 11

    在C#中进行算术溢出检查的最佳实践是什么?

  12. 12

    c#不一致的可访问性阻止将私有类作为受保护方法的参数

  13. 13

    在java中进行强制转换的原因是什么?

  14. 14

    C语言先增加后增加的历史原因是什么?

  15. 15

    在C ++和Java中只有一个返回值的原因是什么?

  16. 16

    使用open时会导致无限循环的原因是什么?(C,UNIX)

  17. 17

    在这种情况下python比C慢得多的原因是什么?

  18. 18

    有些人在目标C中使用GOTO语句的原因是什么?

  19. 19

    C:数据类型。sqrt函数与int一起工作的原因是什么?

  20. 20

    C程序中“异常程序终止”错误的可能原因是什么?

  21. 21

    在 C++ 中使用 upcasting 和 downcasting 的原因是什么?

  22. 22

    C ++如何为同一成员创建公共和受保护的访问器

  23. 23

    如何限制受保护成员只能从第一级子级C#访问

  24. 24

    C ++如何为同一成员创建公共和受保护的访问器

  25. 25

    从与C#的类(局部类)后面的代码不同的程序集中的类访问受保护的成员

  26. 26

    Java中在haskell中进行映射或在C#中进行选择的等效方法是什么?

  27. 27

    为什么C ++中的派生类的朋友不能使用受保护的成员?

  28. 28

    为什么即使在C ++ 20中std :: memcpy也不能成为constexpr的原因是什么?

  29. 29

    如果目录可以访问列表文件或出现未经授权的访问异常,那么在C#.NET中进行检入的最佳方法是什么

热门标签

归档