C++面向对象入门(十四)类对象成员对象和成员函数的分离存储

类成员变量(静态和非静态)和成员函数(静态和非静态)的存储特点
当类无成员变量时, 类对象所占的内存为1个字节, 编译器用于区分不同对象并使其占用不同的内存空间
当类有非静态成员变量时, 类对象所占的内存为非静态成员变量所占内存之和, 说明类非静态成员变量存储在类对象所占用的内存空间上
静态成员变量存储位置和存储在类对象所占用的内存无关
有成员函数的类的类对象所占的空间与无成员函数的类对象的所占空间一样, 说明类成员函数存储位置不在类对象所占的内存空间上, 即类的成员变量和成员函数是分开存储的

示例代码:
#include <iostream>
#include <string>

/**
 * 类成员变量(静态和非静态)和成员函数(静态和非静态)的存储特点
 * 当类无成员变量时, 类对象所占的内存为1个字节, 编译器用于区分不同对象并使其占用不同的内存空间
 * 当类有非静态成员变量时, 类对象所占的内存为非静态成员变量所占内存之和, 说明类非静态成员变量存储在类对象所占用的内存空间上
 * 静态成员变量存储位置和存储在类对象所占用的内存无关
 * 有成员函数的类的类对象所占的空间与无成员函数的类对象的所占空间一样, 说明类成员函数存储位置不在类对象所占的内存空间上, 即类的成员变量和成员函数是分开存储的
 */
using namespace std;

class A{

};

class B {
    int a;
};

class C {
    int a;
public:
    static int b;
};

int C::b = 1;

class D {
    int a;
public:
    void func();
};

void test1(){
    //当类无成员变量时, 类对象所占的内存为1个字节, 编译器用于区分不同对象并使其占用不同的内存空间
    A a;
    cout << "The empty object's size is " << sizeof(a) << endl;
}

void test2(){
    //当类有非静态成员变量时, 类对象所占的内存为非静态成员变量所占内存之和, 说明类非静态成员变量存储在类对象所占用的内存空间上
   B b;
    cout << "The empty object's size is " << sizeof(b) << endl;
}

void test3(){
    //静态成员变量存储位置和存储在类对象所占用的内存无关
    C c;
    cout << "The empty object's size is " << sizeof(c) << endl;
}

void test4(){
    //有成员函数的类的类对象所占的空间与无成员函数的类对象的所占空间一样, 说明类成员函数存储位置不在类对象所占的内存空间上, 即类的成员变量和成员函数是分开存储的
    D d;
    cout << "The empty object's size is " << sizeof(d) << endl;
}

int main() {
//    test1();
    //output: The empty object's size is 1
//    test2();
    //output: The empty object's size is 4
//    test3();
    //output: The empty object's size is 4
    test4();
    system("pause");

    return 0;
}

 

 
posted @ 2020-08-19 14:56  DNoSay  阅读(391)  评论(0)    收藏  举报