c++ - 如果类的私有(private)成员不能被非成员函数访问,那么为什么 main() 能够在这个程序中打印电话的值呢?

标签 c++ object member

#include <iostream>

class student
{
    int phone;
    public:
    student(int a)
    {
        phone = a;
    }

};

int main()
{
    class student s1(10);
    printf("%p \n",&s1);
    printf("%d \n",*(&s1));
  //  printf("%d \n", s1.phone);
   // printf("%p",&s1.phone);


    return 0;
}

输出: 0x7fffd5aa5abc
10

非成员函数可以访问类对象的地址吗?如果是的话为什么我们不能访问其成员?

最佳答案

Can a non member function has access to addresses of class objects? If yes then why cant we have access to its members?

你有一个常见的误解。数据封装(与 const 正确性等其他工具一样)是一种可以帮助您编写更好的程序(即减少错误)的工具。 jail 或监管机构不会试图阻止这一切。你想破坏你管理程序复杂性的能力 - 继续,让所有成员公开,不要使用 const 限定符等等。如果您想使用这些工具 - 它们将是您的 friend 。这意味着通常您在不应该访问该数据的情况下尝试访问该数据 - 编译器会提醒您做错了什么,以便您可以修复错误。这并不意味着它将监视内存并神奇地限制您对它的访问。

关于c++ - 如果类的私有(private)成员不能被非成员函数访问,那么为什么 main() 能够在这个程序中打印电话的值呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58717290/

相关文章:

c++ - 隐式类型转换 : Not Member of Class or Struct

c++ - 传递成员函数指针

objective-c - 核心数据插入多个对象

lisp - 检查 lisp 中是否存在某个项目

c++ - 为什么你可以调用一个复制构造函数传入你正在构造的对象? (C++) (海合会)

C++递归帮助

c++ - 何时实例化依赖于不完整类型作为模板参数的类模板?

javascript - 如何比较对象数组与数组?

javascript - 使用 TypeScript 扩展 Object.prototype

c++ - 没有对象不能调用成员函数