zoukankan      html  css  js  c++  java
  • 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.默认参数是编译器在编译时帮助赋值的,所以只能由全局变量,静态变量,字面值对参数进行赋值
  • 相关阅读:
    面向过程, 面向对象, 类和对象, 类与数据类型
    python函数
    简单的登录注册函数
    Java遍历包中所有类
    spring boot jar启动
    过期算法
    负载均衡算法
    spring boot druid mybatis多数据源
    多线程wait和notify实现1212
    多线程售票
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9445149.html
Copyright © 2011-2022 走看看