接上篇:
1.若写成for(int a=0; ;a++)则a的生命周期只在for循环内,若写成int a;for(a=0; ;a++)则可以在外部继续使用a
2. 私有成员设置成指针和数组的区别:
指针只分配一个地址单元,用来存放地址。
数组分配n个单元,用来存具体的值。
所以你要是想把main中的一个数组的值初始化给私有成员,那么私有成员
1:定义成数组,
2:动态分配内存给指针,但必须写上分配多少(大于等于数组大小的内存)即int x=new x[100]或者200等等。
否则出现bus error错误(C4droid上报这个错误)
3.析构函数或者delete一块为空的内存时,会报错.所以若两个以上指针指向一块内存,用析构或者两次delete时会报错
4.基类a,派生b,c;b,c又被d继承,则a中的成员e在d中被调用时,必须加上b::e或者c::e,否则二义性;它的层次图像一个v;但若是使用虚基类,则e只会被调用一次。它的形状图像为一个菱形.这种三段的层次下才考虑虚基
5.(类型)对象可以用来转换格式,如char x='a';则(int)x的值为97
6.无论何时都不是按照成员初始化列表的顺序执行,是和公有继承的顺序以及类中定义的成员顺序有关
7.no matching function for表示类中没有为所有定义的成员构造函数.如定义一个f x;那么类中必须有f(){}为它构造
8.throw相当于return,把异常信息类型返回给上一级,但这个返回值只能被catch捕捉.已经是最上级即主函数里的throw则不返回,而是直接用主函数
的catch处理
9.递归中如int k=1;f(k,2){f(k+1,2);cout<<k;}中执行完f(k+1,2)回代后继续执行下一条语句,但此时的k不会执行k+1即仍然为1而不是2,即递归回代
后跳过那条递归语句以及它的一切影响
10.全排列核心算法
for(i = k; i <= m; i++) //for循环和递归的合作,i=k而不是等于0,否则有重复
{
swap(&list[k], &list[i]); //第一次不会交换,但由于在for循环中,必然会全部交换一次
perm(list, k + 1, m);//回代判断是否满足输出条件
swap(&list[k], &list[i]); //复原每一次交换,防止顺序引起的错误
}