C++ 类外访问类的私有成员变量
之前一直不太清楚对象的成员变量和成员函数在内存中的占用情况,今天想要直接通过一个对象的变量名去访问其内部的成员变量,特地去看了一下对象中的内存布局。
直接说结论:
- 对于没有继承的情况,对象所占内存的大小和C结构体类似,仅需考虑内存对齐+每个基本成员变量的内存大小就计算出对象所占内存。
- 对于有继承的情况,如果有虚函数,那么除了基本的成员变量外还会存储一个虚表指针,这个指针的位置可能在这个对象的内存的头部也可能在尾部,这个视编译器而定。派生类对象的内存大小会是父类大小加上自身所添加的成员变量。
- 对于空类,大小为1。
- 成员函数是不占用对象的内存空间的,成员函数存储在代码段,全局只有一个。无论声明多少个对象,所有对象所调用的成员函数都是代码段的这一个。
具体可参考C++成员函数在内存中的存储方式
理解了以上内容,那就可以直接用对象名去访问成员变量了:
class Person {
public:
Person() {
}
Person(int id, string name, double height) : m_id(id),
m_name(name), m_height(height) {
}
int getNum() {
return 10;
}
private:
int m_id;
std::string m_name;
double m_height;
};
void foo() {
// 栈空间
Person p{
10, "snow",