C和C++的区别
 C语言语法简单,但使用不易
 C++语法非常庞大复杂,但使用方便,更注重的是它的编程思想(面向对象)。
一.第一个C++程序
 1.文件扩展名
  C++源文件扩展名 .cpp,C,cxx,c(需要指定编译语言)
  C++自定义的头文件依然保留.h
 2.头文件
  C++标准库的头文件,不带.h,最常用的是iostream,
  C语言的东西依然可以继续使用 ,比如stdio.h,也可以改为cstdio
 3.输入输出语句
  cout <<输出
  cin >> 输入
  不在使用占位符,它可以自动识别数据类型
  scanf和printf可以继续使用
 4.编译器
  gcc也可以编译C的源码,但是需要添加额外的参数
  g++是编译C++源码的最简单的编译器,在LINUX和Unix下使用比较方便,一般操作系统没有安装
  ubuntu下的安装指令:sudo apt-get install g++
  之前gcc的编译参数依然可以继续使用
  ps:C++编译时的错误提示不是很精准,一个错误可能产生大量的错误提示
 5.引入了命名空间
  using namespace std;
二.C++中的基本数据类型
 1.C++完全兼容C语言中的所有数据类型(C++兼容C语言中基本所有语法)
 2.添加了bool类型,字节宽度是1,数值true(非0值),false
 3.在显示bool变量前,使用boolalpha可以用true或false形式显示bool值
 4.void *与其他类型的指针转换受到限制
  void *不可以直接给其他类型的指针赋值,必须经过强制类型转换
  任意类型的指针都可以直接给void *赋值
三.C++中的联合,枚举,结构
 1.在C++中,结构,联合,枚举一旦设计成功,在之后的使用就不需要关键字了
 2.枚举的检查更为严格(C++中是一种独立的数据类型)
 3.结构成员中可以有函数,在函数中可以直接访问结构成员
 4.结构对象可以继续使用.或->访问成员和成员函数。
 5.结构中的成员添加了访问属性:
  public:公有的,任何位置,都可以访问
  private:私有的,只能在成员函数中使用
  protected:
 6.结构体在创建的时候,会自动调用构造函数
  a.没有返回值
  b.名字与结构相同
  c.参数是任意的
 7.结构体在释放的时候会自动调用析构函数
  a.无返回值,参数
  b.~结构名
四.引用
 1.引用就是起别名,为一个标识符另外再取一个名字
 
 2.引用必须要初始化,否则编译错误。
 3.引用不光可以引用标识符,也可以引用立即数(右值,字面值,常量),但必须加const
 4.不能定义空引用,但是野引用或者悬空引用是存在的。(引用对内存的数据,当堆内存释放后就不应该再使用)
 5.引用只能是一次性,无法再更改(引用一旦成功之后就是一个变量了,之后身份至死不变)
 6.引用也可以当作函数的参数,它引用的对象就是函数的实参,引用可以达到指针的效果
  a.函数之间共享变量
  b.提高参数的传递效率,效率比指针还要高
  c.可以获取参数
 
  注意:能使用引用的就不要再使用指针了
  引用不能完全替代指针(比如申请堆内存返回的是一个指针)
 7.引用也可以当作函数的返回值,但绝不能返回局部变量的引用
 练习1:使用引用定义一个交换两个变量的函数
 练习2: 定义一个函数,计算一个整数的最大公约数和最小公倍数,最大公约数使用返回值返回,最小公倍数使用引用返回
五.C++中的内存管理运算符
 1.在C++中使用new/delete来管理内存,new用来申请内存,delete来释放内存
 2.new在申请内存时候允许对内存进行初始化
 3.使用new在创建对象结构对象时,会自动调用构造函数,delete时会自动调用析构函数
 总结:malloc/free与new/delete的区别?
 
  1.malloc,free,是标准库中的函数,使用时,需要添加头文件,而new和delete是C++自带的运算符。
  2.malloc返回的是void *指针,而new返回的是有类型的指针
  3.malloc创建对象时,不会调用构造函数,free时不会调用析构函数,但new/delete会自动调用构造和析构函数
  4.使用malloc申请内存大小时,需要自己计算字节数,而new会自动计算
 4.[]可以配合new和delete申请或释放数组
  new[]与delete混用,必须使用delete[]释放。
  使用new[]/delete[]创建多少个对象就会调用多少此构造和析构函数
 5.new/delete 和malloc/free不能混用
 6.delete不可以重复释放,但是可以释放空指针
 7.如果使用new申请内存失败,会产生异常 "std::bad_alloc"
六.C++中的函数
 1.C++中的函数可以在main函数之前执行,C语言中不可以。
 2.C++中函数名字可以相同,只要参数不同即可(这叫做函数重载,不只是参数)
  函数可以同名,并不是真正意义上的同名,它只是在编译期间把函数的名字添加了额外信息,这些额外信息就是函数的参数,返回值不算在内
 3.内联函数
  内联函数就是把函数编译成二进制代码,然后再调用的位置把函数直接拷贝过去,而不是跳转过来后再执行,这样可以减少进栈,出栈和调用,以此提高程序的执行效率,但是这样会增加可执行文件的大小。
  内联函数与宏函数的区别:从本质上来说,它们是一样的,但是内联函数会检查参数是否合法,也可以具有返回值。
  inline 返回值类型 函数名(参数)
  {
  }
 4.C++中函数的参数可以具有默认值,默认参数要尽量少用,否则可能会引起重载错误。
  1.函数的默认参数要靠右
  2.默认参数要尽量少用,因为可能会导致重载错误
  3.默认参数是编译器在编译时帮助赋值的,所以只能由全局变量,静态变量,字面值对参数进行赋值

1.C和C++的区别的更多相关文章

  1. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

  2. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  3. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

  4. 探究@property申明对象属性时copy与strong的区别

    一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...

  5. X86和X86_64和X64有什么区别?

    x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为&qu ...

  6. Java中Comparable与Comparator的区别

    相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...

  7. MySQL中interactive_timeout和wait_timeout的区别

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...

  8. 设置line-height:1.5和line-height:150%或者line-height:150px的区别

    直接正题: 看一下line-height可能的值: 其实可以分为两类: (1)不带单位的(如line-height:1.5),这种是推荐使用的: (2)带单位的(如line-heigth:30px/1 ...

  9. C#中Length和Count的区别(个人观点)

    这篇文章将会很短...短到比你的JJ还短,当然开玩笑了.网上有说过Length和count的区别,都是很含糊的,我没有发现有 文章说得比较透彻的,所以,虽然这篇文章很短,我还是希望能留在首页,听听大家 ...

  10. select、poll、epoll之间的区别总结

    select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...

随机推荐

  1. Linux内核设计与实现 第十七章

    1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...

  2. linux 下gcc 编译结构体问题

    最近在linux 学习c语言的编程,发现好多原来在vs 上的在linux 都编译不过去,今天就遇到了一个问题就是结构体的编译的问题, 结构体大概的定义是 struct Node{ int a; int ...

  3. [2017BUAA软工]第0次博客作业

    第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 当初选择计算机专业作为自己报考大学的第一志愿,主要是看重了市场对于计算机行业人士的巨大需求,同时也感慨于计算机行 ...

  4. PAT 1013 数素数

    https://pintia.cn/problem-sets/994805260223102976/problems/994805309963354112 令P~i~表示第i个素数.现任给两个正整数M ...

  5. activiti 工作流 动态 设置 指定 节点任务人、责任人、组 的实现方式

    首先给大家看一下我的流程图: 流程文件leaveBill.bpmn <?xml version="1.0" encoding="UTF-8"?>&l ...

  6. Oracle 导入导出报错的简单处理

    这边出现报错: 简单查了下资料发现: https://blog.csdn.net/lichkui/article/details/5489708 在imp 的命令后面 增加buffer 即可 比如 i ...

  7. wordpress文章页两侧添加分页导航箭头

    分页导航 如果添加在文章页的两侧,很方便读者翻阅,小编发现好多站长的博客都添加了这一功能,百度了一下,就是JS和css的功能,经过测试成功,分享一下流程. 1.添加Js 在headr.php或者foo ...

  8. matplotlib极坐标方法详解

    一.极坐标 在平面内取一个定点O,叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向).对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到 ...

  9. bzoj 2141 : 排队 (cdq分治+bit)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2141 思路: 其实就是求动态逆序对...cdq降维,用树状数组前后求两遍逆序对就好了 切水 ...

  10. instanceof判断的对象可以是接口

    instanceof是Java的一个二元操作符(运算符) 用法 boolean result = object instanceof class instanceof通过返回一个布尔值来指出,这个对象 ...