1、<<  在c语言里面是左移,在c++里面是一个函数,利用函数重载。例如,
      cout就是一个对象。故它可以调用 << 这个函数。
  • 定义在名称空间中的变量或者函数都称为实体
  • ::  是作用域限定符 ( std:: cout <<"hello , world ")
  • 在命名空间之后,可以加上提示语句,//end of namespace A;
  • 对于命名空间,除了::,外还可以使用using  命名机制,尽可能将其范围缩小。
  • using 编译指令,(using namespace std ; 实体全部引进)建议不要使用,但可以用using申明机制(using std:: out;)  (推荐使用)
  • 对于全局变量,是位于匿名的命名空间,可以用直接加上双冒号  <<  :  :  num;   就可以了,
  • 对于C头文件里面的所用实体都认为是放在匿名的命名空间里面的
2、名称空间的定义策略
  • 可以把命名空间看成一个容器,
  • 名称空间中函数的定义和实现可以分开进行
  • 函数原型可以多次声明
  • 匿名的命名空间   eg:  ( : :memcpy )
3、const关键字
  • 常量的值是不能被修改的
  • const 常量必须要初始化
  • 预处理仅仅是一个打开头文件,进行一个字符串替换,它是不涉及类型检查的。有可能将错误发生的时机延后到运行时,但,如果使用const关键字,它发生的时机是编译时,是具有类型检查的功能。可以尽量使用const关键字,替换宏定义。const常量必须进行初始化。
  • 对于const常量指针,当用const修饰指针时,(const在* 左边时,eg:  const int * pb),我们是不可以使用指针解引用改变该指针指向内容的值,但是可以修改该指针的指向的。相当于左边加上const后,是保护指针指向的内容的额,叫常量指针。   (经常用)
  • 对于const 如果在* 的右边,是如 int  *  const p;时,此时我们可以改变它指向内容的,但是不可以修改它的指向的,相当于,定义了一个p 的指针常量(经常用),如果不清楚,可以参见prime,以C++ prime为准。从右边向左阅读。
  • 类似的概念还有,指针数组 (eg: int * p[10])和 数组指针int (*p)[10],指针函数( int *p( ) )返回指针的函数和函数指针int (*p)()  。
  • c++的申请堆空间,(  eg: int* p= new int(1)  ),可使用delete 释放空间。首先new/ delete是表达式,其次开辟空间时,是可以进行初始化的,成对使用。申请10个对象时,int *p=new int [10] ( )  ,它是可以识别类型的。这样可以把数组初始化为0,,释放时,delete  [  ] p;都需要加上中括号。
  • 对于c语言的malloc  / free 是c的标准库函数,开辟空间时,是不能初始化的,但可以赋值,给指向,也是必须的。不然就是野指针。成对使用。
4、引用  &
  • 引用是一个变量的别名,有一点和指针很像,因为引用要绑定在一个变量上去的,故必须进行初始化,绑定,一旦绑定就不会再改变指向。(eg:  int  & ref =a)类似于一个指针常量,不能改变指向。
  • 操作引用的时候,就是操作变量本身。经典例子,Swap交换函数,法一,传地址,交换值,法二,传引用,,
  • 非const左值引用不能绑定到右值--->只有const左值引用才能绑定到右值,eg: const  int & ref =10;-->可以。int & ref =10;不行,左值是左边可以加运算符的eg:  &a,,
  • swap(int  & refa,int  &refb)-------swap(a,b)  在参数传递时,可以节省复制的开销,不用另外开辟空间,提高程序的执行效率,使用更直观。
5、指针与引用的差别:
  • 指针是一个独立的实体,而引用是一个别名
  • 指针是不需要进行初始化,但引用必须要进行初始化。
  • 指针是可以改变指向的,引用不能。
  • 指针可以指向NULL,但引用不能。
  • 引用作为函数的参数,操作的就是实参本身。
引用的注意情况:
  1. 引用作为函数的返回值。首先要保证绑定引用的变量的生命周期一定要大于函数的。例如:在函数栈里面的一个局部变量被引用返回时,局部变量就会被销毁。故注意 不要返回一个局部变量。
2、  返回一个堆空间的一个引用,return  //  若引用发生偏移,则会
发生内存泄露,所以,不要将已返回一个堆空间变量的引用的,
除非已经做好了内存回收的策略的。
6、类型强制转换
  • c语言中,例如,double  b;   int  a=(int ) b;
  • c++中强制转换的运算符,关键字,,
  • int  a,= static_cast<int>(b);
  • 还有const_cast  / dynamic_cast  /  reinterpret_cast(暴力转换)
7、c语言不支持函数重载的,但也可以实现,比较麻烦。
  • c++支持函数重载,其实现的原理当函数名称相同时,是名字改编那么( name mangling),其步骤是,当函数名称相同时,会根据函数的参数的类型,个数,以及顺序的不同进行改编。可先生成 .o文件,再用nm命令查看  .o 文件。
  • 当我们需要函数名以c语言的方式去调用,名字不进行名字改编可以采用关键字   extern  "C"{   里面为语句  }      //end of extern "C"  ,这样就不会进行名字改编。  这样就可以使用C 的方式。
        #ifdef  __cplusplus
         extern  "C"
          {
          #endif
         #ifdef  __cplusplus
         extern  "C"
          {
          #endif
   //这样就可以实现c与c++的混合编程,或者说C++兼容C的代码。
     之所以要这样,是应为C不支持,函数重载。
8、C++是支持函数形参为他一个默认值的(或者缺省值)   int add(int  x,int y=0)        
    
     调用add(3)      //默认--缺省值的设置,只能从右到左的顺序,此
     外,在函数设置默认传参时,要尽量避免二义性。  默认值的问题
9、C++里面提供了一个bool类型
 
        bool大小是一个字节。
10、当有一个简单的函数,直接替换时,c语言可以使用带参数的宏
定义,C++中可以加上  inline  关键字之后,在函数真正调用
时,会直接将函数体的内容直接替换,从而提高函数的执行效
率。 (内联函数)  --- >功能等价C语言的带参数的宏定义。
11、C语言与C++中的字符串
  • c语言在处理字符串时,需要考虑空间大小,避免越界。
  • C++的字符串处理就比较方便,#include<string>  也在std的命名空间里面。std::string s1="hello"; std::string s2(",world");
  • 遍历字符串的内容,string类也可以直接访问, s.size()  或s.length ( )  字符串长度。其中也可以直接用下标访问法去访问。
  • 截取字符串  s. substr(初始位置,截几个)  返回值即为截取的字符串。默认情况下是从0 开始的,
  • 将C++风格的字符串转换成c风格的字符串,,,const char *p= s.c_str( ) ;常用  或者  S.data( )方法也可以完成这样的工作。
  • “hello”  的类型就是const  char  * 的类型。故这就是反转换成C++的string  的类。(常用 )

C++学习笔记系列一相关推荐

  1. SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引

    SQL Server 2008中的一些特性总结及BI学习笔记系列,欢迎与邀月交流. 3w@live.cn  ◆0.SQL应用系列 1.SQL Server 2008中SQL增强之一:Values新用途 ...

  2. BizTalk学习笔记系列之二:实例说明如何使用BizTalk

    BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...

  3. SQLServer学习笔记系列2

    SQLServer学习笔记系列2 一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继 ...

  4. CodeMonkey过关学习笔记系列:11-20关 对象

    CodeMonkey过关学习笔记系列:11-20关 •对象和朋友(OBJECTS AND FRIENDS) 11~20 知识点 turnTo,turtle.step 做题之前,解决事情之前我们先列好计 ...

  5. CodeMonkey过关学习笔记系列:46-55关 数组

    CodeMonkey过关学习笔记系列:46-55关 •"数组"索引 (ARRAY INDEXING) 46~55 第 46 关挑战 当我们有一根以上的香蕉时,我们可以用 [] 这个 ...

  6. CodeMonkey过关学习笔记系列:71-85关 函数

    CodeMonkey过关学习笔记系列:71-75关 •"函数"农场 (FUNCTION FARM) 71 ~ 85 第 71 关挑战 "函数"农场step di ...

  7. 自动控制原理学习笔记系列( 一、自动控制系统的稳定性分析)

    自动控制原理学习笔记系列 第一篇 自动控制系统的稳定性分析 自动控制原理学习笔记系列 一.目的 二.操作步骤 1. 研究高阶系统的稳定性 2.系统根轨迹增益变化对系统稳定性的影响 一.目的 (1) 研 ...

  8. C++菜鸟学习笔记系列(3)——基本内置类型的使用

    C++菜鸟学习笔记系列(3) (前两天比较忙,没有进行更新,今天及时又写了一篇) 本期主题:C++中基本内置类型的使用. 与C语言类似的C++也定义了一套包括算术类型和空类型在内的基本数据类型,其中算 ...

  9. SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引 @邀月

    邀月 的数据库学习 http://www.cnblogs.com/downmoon/archive/2011/03/10/1980172.html SQL Server 2008中SQL应用系列及BI ...

  10. 步步为营 .NET 设计模式学习笔记系列总结

    设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...

最新文章

  1. 牛客网多校训练第一场 B - Symmetric Matrix(dp)
  2. 你在使用Gmail,Wallop,MSN Spaces,Three Degrees吗?
  3. WPF Splash Screen 和启动速度相关资料
  4. ArcGIS Server10.2服务启动不了之http://localhost:6080/arcgis/manager无法打开之arcMap 无法打开6080admin问题解决之路
  5. inDesign入门教程,如何添加阴影效果?
  6. android核心基础(5)_Android)java虚拟机和Dalvik虚拟机的区别
  7. 有关Ajax实现的两种方法
  8. Atitit 如何做数据分析 描述型:发生了什么?可视化仪表盘化很重要。 1 2. 诊断型:为什么会发生?结合历史记录 1 3. 预测型:可能发生什么? 2 4. 指导型 规划未来行动:我需要做什
  9. 牛客网 F-The Biggest Water Problem
  10. SLAM学习----使用rplidar运行Hector算法
  11. 单片机实验四 矩阵键盘实验
  12. 如何将docker部署的wekan迁移另一台服务器
  13. mysql 延迟关联
  14. 38、Power Query-背后的贤内助M语言
  15. mac如何查看IP地址,mac怎么查看IP地址
  16. 高清修复太感人!百部高清修复版港片上线,AI增强老剧画质
  17. python综合实验心得体会_综合实验心得体会
  18. react-dom.development.js:6202 Unable to preventDefault inside passive event listener invocation 错误
  19. Yahoo! 中国搜索使用说明(转)
  20. oracle自动更新视图,Oracle 视图及视图更新

热门文章

  1. Mysql数据库备份和按条件导出表数据
  2. memcached 如果进程占用cpu很高
  3. ANT:fileset中使用exclude
  4. 隐式类型转换中显式申明的非必要性
  5. mac启动mysql,apache,php
  6. Linux系统间文件双向同步搭建Unison版
  7. 网络软文发布软件_星浪中合网软文写出爆款汽车营销软文的特点是什么?
  8. 中职计算机英语c答案,中职高考计算机试题及答案-20210622105004.docx-原创力文档...
  9. vfp程序改错 计算机和英语,vfp程序改错教案.doc
  10. python3 换源_CentOS 7.5 下 python3 安装及 pip 换源