C++ 类和对象零散知识点
C 类和对象零散知识点成员函数的声明和定义类的成员函数如果定义在类中默认为inline函数如果声明定义分离则要在函数定义前面指定类域类和对象的空间占用类就像一张设计图纸运行时是不占用堆栈内存的对象占用的内存由非静态成员变量决定成员函数、静态成员变量、成员函数都不会占用空间空类是特殊的即使它里面没有任何成员变量C规定它的对象大小为 1 字节这是为了保证每个不同对象都有唯一内存地址注意内存对齐和虚函数也会影响对象的大小内存对齐不在此处解释如果类有虚函数对象里会多出一个虚表指针 (vptr)占用 8 字节 (64 位系统)指向虚函数表。this 指针C规定不能在实参和形参的位置显式的写this指针(编译时编译器会处理)但是可以在函数体内显式使⽤this指针。友元友元提供了一种突破类访问限定符封装的方式它可以给外部函数即 友元函数或外部类即 友元类赋予“好友权限”使它们可以访问类内部的私有成员恰如它的关键字friend那样。使用时在函数声明或者类声明的前面加 friend 并且把友元声明放到一个类的里面外部友元函数可访问类的私有和保护成员友元函数仅仅是一种声明它不是类的成员函数友元函数可以在类定义的任何地方声明不受类访问限定符限制一个函数可以是多个类的友元函数友元类的关系是单向的且不能传递的不具有交换性内部类嵌套类一个类里面定义的另一个类就是内部类。内部类的本质是独立类型仅作用域被包裹在外部类中不是外部类成员变量。创建外部类对象不会自动创建内部类对象sizeof(外部类)不计入内部类大小C内部类无隐式外部类this指针内部类可访问外部类全部成员前提手动传入外部类对象/指针/引用。外部类可访问内部类全部成员前提创建内部类对象静态成员可直接Inner::静态成员访问内部类默认是外部类的友元类匿名对象匿名对象是没有名字的临时对象创建后没有变量接收生命周期仅在当前这一行表达式结束。创建格式类名()不定义变量名。// A 是一个类 // 对于普通对象 A aa1(); //不能这么定义因为编译器⽆法识别它是⼀个函数声明还是对象定义 // 对于匿名对象 A(); // 是可以的