内部类:(例如:b定义在a类中)
注意事项:
(1)内部类b可以直接使用外部类的static变量,但是并不属于外部类的友元!!!!
#include <stdio.h>
#include <iostream>
using namespace std;
class a {class b {void print(){cin >> aa;cin >> bb;}};
private:int aa;int b;static int bb;
};
int main() {return 0;
}
可以拿上面这个代码去尝试(会发现有aa有红线警告)
(2)sizeof去计算a时不会加上这个b类;
(3)外部有跟它重名的就没办法限制相同名字类别的产生;
#include <stdio.h>
#include <iostream>
using namespace std;
class a {class b {};
};
class b {};
int main() {return 0;
}
(4)如果a是专门为b所创造的类,那么置于private处就能让该类只能被b使用。
匿名对象
注意事项:
(1)正常的匿名对象介绍:
展示匿名对象的生成和销毁过程:
可以看出匿名函数只有一行的生命周期。
(2)引用匿名函数(需要const!!!!)
a& aaa = a();单纯这样可是不行的,因为这里使用匿名函数相当于生成了一个临时对象。
const a& aaa = a(); 这样就没有问题了
那你肯定会疑惑了,不是只有一行的生命周期吗?那这里去给aaa有什么意义?其实在const修饰之后,a()的生命周期就被延长了,直到aaa要销毁了他才销毁。
(3)实际运用的场景:
如果在类似栈push这个函数,如果你push的是一个类对象,那你要怎么给缺省参数?那是不是就可以用匿名函数去给?