为什么我们可以使用指针访问私有数据成员 class,而不使用 class 中其他成员的友元函数?

Why can we access private data members class using pointers, without using members friend function other members in the class?

如您所知,私有成员只能被 class

中的其他成员访问
class DateClass // members are private by default
{
    int m_month; // private, can only be accessed by other members
    int m_day; // private, can only be accessed by other members
    int m_year; // private, can only be accessed by other members
};
 
int main()
{
    DateClass date;
    date.m_month = 12; // error
    date.m_day = 15; // error
    date.m_year = 2020; // error
 
    return 0;
}

但我很惊讶您可以使用指针来访问私有数据成员。一个例子:

#include <iostream>  
  
class Test { 
private: 
    int data; 
  
public: 
    Test()
    {
        data = 0;
    }

    int getData()
    {
        return data;
    }
}; 
  
int main() 
{ 
    Test t; 
    int* ptr = (int*)&t; 
    *ptr = 10; 
    std::cout << t.getData(); // it will return 10
    return 0; 
}

这是故意的吗?为什么私有成员可以通过指针访问?我是初学者,所以这个问题很愚蠢。

实际上是使用语句获取的指针的行为

int* ptr = (int*)&t; 

未定义。 (从技术上讲,这是 严格别名 违规)。

C++ 充斥着未定义的结构——这是使该语言极难掌握的原因之一。鉴于您刚刚开始学习 C++(顺便说一下,一本好书是无可替代的),在您知道自己在做什么之前避免所有类型转换。