1.C和C++的区别

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.默认参数是编译器在编译时帮助赋值的,所以只能由全局变量,静态变量,字面值对参数进行赋值
posted @ 2018-08-08 19:21  LyndonMario  阅读(533)  评论(0编辑  收藏  举报