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

牛客网刷题总结-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()编译错误。

猜你喜欢

转载自blog.csdn.net/weixin_43873355/article/details/85036904