关于牛客网刷题后的简单总结

牛客网刷题总结-C++面向对象


  1. C++类的数据成员的存储类型,不能是auto、register和extern:
    原因:auto/register/extern表示的是变量的存储位置和作用域。auto变量存储在函数的堆栈空间,register存储在寄存器,extern表示这里没有新定义变量,只是扩展了一个已有全局变量的作用域。类和结构体中的变量是成员变量,其存储位置和作用域由定义对象的函数决定,不由这些对象自己决定。
  2. class A{
    };
    class B{
    char ch;
    int x;
    };
    class C{
    public:
    void Print(void){}
    };
    class D
    {
    public:
    virtual void Print(void){}
    };`下面四个类A,B,C,D,在32位机器上sizeof(A),sizeof(B),sizeof©,sizeof(D)值分别为()
    类A空类型的实例虽然不包含任何信息,但是必须在内存中占一定的空间,否则无法使用这些实例,一般都是1
    类B因为内存对齐所以为8,
    类C里面虽然有函数,但是只需要知道函数的地址即可,而这些函数的地址只与类型相关,而
    与类型的实例无关,编译器不会因为函数而在内存中多添加任何的额外信息.所以还是1
    类D因为有虚函数,C++的编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的
    每一个实例中添加一个指向虚函数表的指针.因为多了一个指针,所以在32位机器为4,64位机器为8

在这里插入图片描述

Foo b(); 声明了返回类型为Foo,参数为空的函数。因此导致b.fun()编译错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值