您的位置:首页 > 编程语言 > C语言/C++

总结最近学习的C++知识

2014-09-24 19:30 316 查看
           上C++的课程已经是两年以前的事情了,从学习到现在教材也看了几遍了,感觉基本知识应该都会了。昨天去参加一个笔试,可能也是长时间没做题,C++也有一段时间没有看了,好多题都拿不定主意,结果也是让人很伤心。所以这两天想再复习一下C++,并把原来没掌握好的知识点记录一下。

1.placement new 

       遇到它是因为看到网上有人想显示的调用类的构造函数,如果直接调用,编译不会通过,编译器告知“不允许调用类型名”,编译器把构造函数看成是一个类型。解决办法有两个:一个是用作用域运算符::来调用,另一个就是用placement new的方法,使用起来很简单, 如下:

MyClass * mc = new MyClass;
new(mc)MyClass();
delete mc;
       placement new 作用是该类的构造函数但是不分配内存,而是在已有的内存块上面创建对象。用于需要反复创建并删除的对象上,可以降低分配释放内存的性能消耗。比如:如果系统中某一个程序总是需要创建新的堆空间,运行时间长了内存会越来越小,不得不进行内存回收。使用placement new 而不是new就可以省去内存回收的时间。

    我想,在此处用

new(mc)MyClass();

    是在mc指向的空间里,显示地定义了这个函数,就可以显示调用了。

2.虚函数 纯虚函数 虚基类


    基础知识 不能花时间解释了 必须掌握 继承和多态是C++重点

3.static和const的作用

 static:1)修饰局部变量和修饰全局变量,都是限制作用域,并且被修饰的变量如果没有被初始化就被初始化为0或‘\0’,并且下一次调用是维持上一次的值;

             2)修饰类的成员变量,该成员变量在这个类所实现的所有对象里只有一个拷贝,调用时使用“类名::变量”;      

             3)修饰类的成员函数,该成员函数只能访问static成员变量,不接收this指针;

 const:1)修饰变量,该变量只能在初始化的时候被赋值,之后不能改变,该用法与预定义差不多,但与#define相   比,它可以定义变量类型;

             2)修饰类成员函数,则在该函数中不能有改变变量值的语句出现;

             3)修饰形式参数,则该形参在函数中不会被改变,例如复制构造函数中的形参;

             4)修饰指针,则该指针的值不能改变;修饰指针所指的值,则该指针的值可以变,但所指的值不能变;也可以同时修饰;

             5)修饰函数,使返回值不能做左值(如乘法运算符*,乘完就完了,做左值没有意义(这一点从别人那里看到的))

4.volatile

      这是学arm的时候的知识了,是C中的知识。 作用是防止编译器优化,在访问寄存器的时候作用尤其突出。下面是几个注意点:摘抄至http://baike.baidu.com/view/608706.htm?fr=aladdin

      1)一个参数可以同时被const和volatile修饰,比如对于一个只读状态存储器,因为它可能会改变,防止改变后不能读出正确的值,用volatile修饰;同时,程序又不能试图去修改它,所以用const修饰;两者不矛盾;

      2)一个指针可以是volatile的,比如中断服务子程序中修改一个指向buffer的指针时,应该定义为volatile的;

      3)如下程序是有问题的

<span style="font-size:18px;">int square(volatile int * p){
return *p * *p;
}</span>
会被编译器理解为:
<span style="font-size:18px;">int square(volatile int *p){
int a = *p;
int b = *p;
return a*b;
}</span>


对a、b赋值的时候可能会被中断,a和b的值会不同。

5.C++中的引用和C中的指针的区别

    1)引用定义时必须初始化,并且不分配内存空间;而指针不用在定义时初始化,并且分配存储空间;

    2)不能创建对空值的引用,但是可以创建指向空值的指针

6.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: