关于c++的一些自我认识(2)

接上篇:

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]); //复原每一次交换,防止顺序引起的错误


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值