博客
关于我
c++基础——类的大小
阅读量:490 次
发布时间:2019-03-06

本文共 1142 字,大约阅读时间需要 3 分钟。

C++类大小分析

在C++编程中,类的大小计算是一个常见但容易引起混淆的问题。本文将通过一个实例详细分析类的大小计算规则,并探讨如何影响类的大小。

实例代码

#include 
using std::cout;using std::endl;class Father {private: int age;public: void showAge() { cout << "Age: " << age << endl; }};class Mother {};class Son : public Father {};class Sister : public Father {private: static int a;};int main() { cout << "Size of int : " << sizeof(int) << endl; cout << "Size of Father: " << sizeof(Father) << endl; cout << "Size of Mother: " << sizeof(Mother) << endl; cout << "Size of Son : " << sizeof(Son) << endl; cout << "Size of Sister: " << sizeof(Sister) << endl; return 0;}

执行结果分析

  • 类的大小与方法无关

    • int的大小为4字节,Father类的大小也为4字节。
    • Mother类为空类,大小为1字节。
    • Son类继承自Father,大小仍为4字节。
    • Sister类同样继承自Father,但添加了一个静态变量a,静态变量不占用类大小。
  • 空类的大小

    • 一个空类的大小始终是1字节,而不是0。
  • 继承与私有变量

    • 子类SonSister包含父类Father的私有变量age,但子类的大小与父类相同。
    • 静态变量不占用类大小,Sister类的静态变量a不会影响类的大小。
  • 虚函数的影响

    Father类中的showAge()改为虚函数:

    class Father {private:	int age;public:	virtual void showAge() {		cout << "Age: " << age << endl;	}};

    此时,Father类的大小增加了4字节。这是因为虚函数引入了一个指向虚函数表的指针,大小为4字节。

    总结

    • 类的大小主要由其成员变量和非静态成员函数决定。
    • 空类的大小始终为1字节。
    • 虚函数的引入会增加类的大小,增加的字节数等于指针的大小(通常为4字节)。

    通过以上分析,可以清晰地理解C++类大小计算的规则及其影响。

    转载地址:http://puodz.baihongyu.com/

    你可能感兴趣的文章
    object detection错误之no module named nets
    查看>>
    Object of type 'ndarray' is not JSON serializable
    查看>>
    Object Oriented Programming in JavaScript
    查看>>
    object references an unsaved transient instance - save the transient instance before flushing
    查看>>
    Object.keys()的详解和用法
    查看>>
    OBJECTIVE C (XCODE) 绘图功能简介(转载)
    查看>>
    Objective-C ---JSON 解析 和 KVC
    查看>>
    Objective-C 编码规范
    查看>>
    Objective-C——判断对象等同性
    查看>>
    Objective-C之成魔之路【7-类、对象和方法】
    查看>>
    Objective-C享元模式(Flyweight)
    查看>>
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>
    Objective-C内存管理教程和原理剖析(三)
    查看>>
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>
    Objective-C实现1000 位斐波那契数算法(附完整源码)
    查看>>
    Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
    查看>>
    Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
    查看>>
    Objective-C实现2D变换算法(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>