C++试题5

12、若char是一字节,int是4字节,指针类型是4字节,代码如下:

class CTest
{
    public:
        CTest():m_chData(‘\0),m_nData(0)
        {
        }
        virtual void mem_fun(){}
    private:
        char m_chData;
        int m_nData;
        static char s_chData;
};
char CTest::s_chData=’\0;

问:
(1)若按4字节对齐sizeof(CTest)的值是多少?
(2)若按1字节对齐sizeof(CTest)的值是多少?
请选择正确的答案。
16 4
16 10
12 9
10 10
正常答案:C
1、类无虚函数,无成员,1个字节,有虚函数,或成员。就不算类大小
2、static内存在全局,不算类的
3、虚函数是因为有虚函数表,4个字节,多个虚函数还是只有一个虚函数表,4个字节
4、此类虚函数:4 int:4 char:1
按4对齐:虚函数:4 + int:4 + char:4 = 12
按1对齐:char:1 + 虚函数:4 + int:4 = 9
11、设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?

C c;
void main()
{
    A*pa=new A();
    B b;
    static D d;
    delete pa;
}

A B C D
A B D C
A C D B
A C B D
答案:B

1、成员(栈)生命周期是函数结束而结束:
2、内存申请(堆),释放时生命结束,不释放不结束
3、静态存储区建立对象d,但是局部变量,程序结束时候释放.
4、全局对象,对它的初始化是在main函数之前,所以析构时候要放在最后.

易出错是D B的析构。静态区变量都是先构造的后析构,从而保证了变量间的依赖关系不出错! 就本题而言,全局变量需要最先构造,静态变量在main函数内,所以在main运行前构造!因此D在B前

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值