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

接上篇:

1.10007这种数字就是超出整数范围,用它就代表不能直接计算,要把它化小,如先加后取余可能会超过范围,但是先取余后加就ok了,而且结果一样
或者使用long long类型。

2.如果不定义成虚函数,那么就只会进行静态联编,在编译时阶段完成,即无论子类父类指针会定死了指向基类同名函数,运行时无论如何都不会改变这个结果。如果设置为虚函数,则会智能判断指针到底指向的哪个同名函数,如果是子类指针则调用子类同名函数,父类则调用父类同名函数。
总结就是:虚函数给了指针识别力

3.#define a 1和int a=1的区别,前者是直接替换,后者是赋值,所以log("%d",x)对于前者是错的,因为x直接用2替换了,对于后者就是对的

4.条件判断中如whie(a&&b)&&或‖前面的要是不成立就不判断后面的了

5.指向指针的指针**p可以用来表示二维数组,写在参数内为fun(**p)
  而直接写的一个二维数组p〔a][b〕传入参数时行参则不能写成fun(**p),必须是fun((*p)[4])表示一个含四个元素的指针,但传入时实参写fun(p)。  因为一维数组实参为fun(p),行参为fun(*p).但是二维数组有几种如 fun(int a[][10],...)
 { ...}
 int b[6][10];
 fun(b,...)
 2.数组指针传递
 fun(int (*a)[10],....)
 {...}
 int b[6][10];
 fun(b,...)
 3. 双重指针传递
 fun(int **a,.....)
 {.....}
 int b[6][10];
 fun(&b[10],...)
 4. 一维指针传递 
 fun(int *a,.....)
 {
 //用*a(i*n+j) 表示a[i][j]
 }
 int b[6][10];
 fun(&b[0][0],...)

6.定义了一个基类指针对象,1首先它不能指向(调用)子类才有的函数和其它成员(这条是铁则,无解!);其次,2即使子类中重新定义了与父类同名的函数,基类指针对象指向它虽然不会报错,但是执行的仍然是父类同名函数。总结就是:父类指针只能调用父类自己的成员。
为了解决2,引入虚函数。使得父类前缀virtual的成员都能被子类“有作用”的重新定义,父类指针对象指向它就能执行子类的同名函数。

7.定义数组对象时,会调用数组大小次的构造与析构函数。定义指针对象时,若不分配内存则不调用构造函数,若不delete指针,则不调用析构函数;*p[10]还是一个指针,(*p)[10]也是一个数组,不给它分配内存不会调用构造函数

8.int*p=&c;表示p指向c的地址,而此时p的地址仍然是p自身的地址,即&p是p自己的地址,p是c的地址

9.构造函数不会为静态成员分配内存。

10.单例实现准则

 1.接口(getinstance)定义为公有静态函数,被访问的单例对象要定义私有静态成员。利用静态函数只能调用静态成员特性保证了封装性
 2.虽然称为单例,但其实里面是要写别的功能代码的,如player.h,单例保证了只能通过这一个接口访问该类的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值