总结最近学习的C++知识
2014-09-24 19:30
316 查看
上C++的课程已经是两年以前的事情了,从学习到现在教材也看了几遍了,感觉基本知识应该都会了。昨天去参加一个笔试,可能也是长时间没做题,C++也有一段时间没有看了,好多题都拿不定主意,结果也是让人很伤心。所以这两天想再复习一下C++,并把原来没掌握好的知识点记录一下。
1.placement new
遇到它是因为看到网上有人想显示的调用类的构造函数,如果直接调用,编译不会通过,编译器告知“不允许调用类型名”,编译器把构造函数看成是一个类型。解决办法有两个:一个是用作用域运算符::来调用,另一个就是用placement new的方法,使用起来很简单, 如下:
我想,在此处用
是在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)如下程序是有问题的
对a、b赋值的时候可能会被中断,a和b的值会不同。
5.C++中的引用和C中的指针的区别
1)引用定义时必须初始化,并且不分配内存空间;而指针不用在定义时初始化,并且分配存储空间;
2)不能创建对空值的引用,但是可以创建指向空值的指针
6.
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.
相关文章推荐
- 最近准备做一个C++模式设计方面的学习总结,希望有路过看见的人推荐一下
- 总结系列_4(C++知识学习,续...)
- 最近学习c++总结
- 总结系列_4(C++知识学习,续...)
- c++学习历程(3)之 第二章基础知识总结
- 学习C及C++中基础知识总结
- 学习C++的基本类和对象的基本知识总结
- 惭愧,直到今天才对“数据类型字节对齐”有个深入的了解,对以前读书时学习的知识没有深刻理解啊 C/C++学习 C/C++学习 漫漫人生,澎湃的经历不断促使改变自己,永恒不变的是一颗骄傲的心!
- 个人学习Linux知识总结
- C++知识学习心得
- 最近学习总结
- c++学习的总结
- c++学习的总结
- 最近一段时间的java框架学习总结
- C++学习(4)--基础知识(4)--关于const
- 我自己学习C++编写的常用函数,类,模版 最近修改日期:2008年3月26日
- 最近的学习状况(几本C++书)
- C/C++语言基础知识总结
- 自己总结C/C++的一些容易被遗忘的基础知识!
- 介绍有关学习C++ STL的预备知识和STL的相关背景知识,适合想对STL做大致了解的初学者