C++错题本

假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

1 #include <stdio.h>
2 int main(){
3   long long a = 1, b = 2, c = 3; 
4   printf("%d %d %d\n", a, b, c);  
5  return 0;
6 }

所以小端(低地址在前),结果1,0,2 

知识点:函数参数入栈由右向左;

                栈地址从高到低

2.       static的使用; 

 A不正确,const static 可以在类内初始化,其余情况不行

3. new 和delete的原理

 4.拷贝构造:

 5.类指针并不会调用构造函数

 6.chu'shi初始化列表

 7.拷贝构造:返回A的时候会调用拷贝构造

 

8.拷贝构造函数调用次数

 共7次

 

 9.

成员列表初始化:static不可以放类内初始化,除非const static ;  

第三条:无默认构造函数,必须在初始化列表处初始化

 

 10.加号之前必须是对象,在加号之后的会自动转换为对象

 11. 数组指针与指针数组

 12. 结构体对齐计算方法:

  1. 首先知道最小对齐数(64位 vs为8,linux为4)
  2. 成员在结构体中的偏移量(相对于起始内存地址)能否被min(类型大小,最小对齐数)整除
  3. 最后全部大小能否被min(成员最大数据类型大小,最小对齐数)整除

13. 虚函数表:在常量区

a=200 b=10

class Test{
public:
    int a;
    int b;
    virtual void fun() {}
    Test(int temp1 = 0, int temp2 = 0)
    {
        a=temp1 ;
        b=temp2 ;
    }
    int getA() 
    {
        return a;
    }
    int getB() 
    {
        return b;
    }
};

int main()
{
    Test obj(5, 10);
    // Changing a and b
    int* pInt = (int*)&obj;
    *(pInt+0) = 100;   
    *(pInt+1) = 200;   
    cout << "a = " << obj.getA() << endl; 
    cout << "b = " << obj.getB() << endl; 
    return 0; 
} 

解:
需要考虑虚函数表,指向虚函数表的指针在32位系统下占用4个字节,其地址分布在整个类成员变量的地址的首部,接下来就是变量a的地址、b的地址。
当将test对象obj赋给指向整型的pInt后,指针pInt指向了地址的首部也就是虚函数表指针,所以*(pInt+0)=100改变的是虚函数表的值,接下来*(pInt+1)=200改变的是变量a的值,变量b没有变换。
原文链接:https://blog.csdn.net/jjjstephen/article/details/109198009

14.多态

 

 解释:C++编译时多态和运行时多态_TABE_的博客-CSDN博客_编译时多态和运行时多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老赵的博客

叮咚,你的赏钱已到账,嘿嘿嘿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值