class 中的成员函数与成员变量是分开存放的
每个对象有独立的成员函数
所有对象共享类中的成员函数
下面看如下一段代码:
#include <iostream>
#include <string>
using namespace std;
class A
{
int i;
int j;
char c;
double d;
public:
void print()
{
cout << "i = " << i << ", "
<< "j = " << j << ", "
<< "c = " << c << ", "
<< "d = " << d << endl;
}
};
struct B
{
int i;
int j;
char c;
double d;
};
int main()
{
A a;
cout << "sizeof(A) = " << sizeof(A) << endl; // 20 bytes
cout << "sizeof(a) = " << sizeof(a) << endl;
cout << "sizeof(B) = " << sizeof(B) << endl; // 20 bytes
a.print();
B* p = reinterpret_cast<B*>(&a); // 为嘛可以强制转换
p->i = 1;
p->j = 2;
p->c = 'c';
p->d = 3;
a.print();
p->i = 100;
p->j = 200;
p->c = 'C';
p->d = 3.14;
a.print(); // 为嘛修改了类中的私有成员变量
return 0;
}
通过上面代码发现 通过指针p 成功修改了对象a的私有成员变量。 说明访问权限关键字在运行时失效了
由上面代码获得如下结论:
运行时的对象退化为了结构体的形式 (可以强制转换通过)
所有成员变量在内存中一次排布 (通过结构体指针直接修改所指向对象的成员变量)
成员变量间可能存在内存空隙 (sizeof的大小和 结构体表现一样,存在内存对齐问题)
可以通过内存地址直接访问成员变量 (通过结构体指针直接修改所指向对象的成员变量)
访问权限关键字在运行时失效 (通过结构体指针直接修改所指向对象的私有成员变量)