1.C和C++的区别

news/2024/7/20 15:09:40 标签: 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.默认参数是编译器在编译时帮助赋值的,所以只能由全局变量,静态变量,字面值对参数进行赋值

转载于:https://www.cnblogs.com/LyndonMario/p/9445149.html


http://www.niftyadmin.cn/n/684136.html

相关文章

LWIP之opt.h配置含义

&#xfeff;&#xfeff;SYS_LIGHTWEIGHT_PROT 平台锁&#xff0c;保护关键区域内缓存的分配与释放NO_SYS --- 是否带操作系统&#xff0c; 1时带&#xff0c;0时&#xff0c;不带MEMCPY(dst,src,len) --- 内存拷贝 若你希望自己写拷贝函数则可替换SMEMCPY(dst,src,len) ---内…

Tomcat的下载

Tomcat的基本使用 1.到官网下载 2.解压&#xff0c;在bin目录下点击startup.bat启动Tomcat 3.在浏览器地址输入localhost&#xff1a;8080,默认进入Tomcat的webapps文件下的ROOT文件的网页画面

认识UART接口

没有仔细研究过&#xff0c;就用了下&#xff0c;总结了点&#xff0c;也搜了点资料. ---------------------------------------------------------------------------------------------------------------------------- 简单的讲&#xff1a;(UART与COM) 嵌入式里面说的串口…

第一个Javaweb程序(Maven和Tomcat的配置)

网站是如何访问的&#xff1f; 1.输入一个域名&#xff0c;回车 2.检查本机的C:\Windows\System32\drivers\etc\host配置文件下有没有这个域名映射&#xff1b; ①有&#xff1a;直接返回对应的IP地址&#xff0c;这个地址中&#xff0c;有我们需要访问的web程序&#xff0c…

项目管理的五个过程和九大知识领域

项目管理的五个过程和九大知识领域 项目是为完成某一独特的产品或服务所做的一次性努力。根 据这个定义&#xff0c;项目就具有了目标明确性、活动一次性及资源消耗性等特性。换句话说&#xff0c;具备前面三个主要特性的活动&#xff0c;都可以看作是项目。现实中的项目随处可…

ServletContext共享资源

servlet原理图 ServletContext web容器在启动的时候&#xff0c;它会为每个web程序都创建了一个对应的ServletContext对象&#xff0c;它代表了当前的web应用 共享数据 我们在这个Servlet中保存的数据&#xff0c;可以在另外一个Servlet中拿到 public class HelloServlet exten…

Android多APN同时工作原理分析

平台&#xff1a;android5.1 场景&#xff1a;客户使用运营商的流量卡&#xff0c;希望多路APN同时工作。 时间&#xff1a;2016.7.1 大概了解Mms机制&#xff0c;发现发送彩信时&#xff0c;使用的是另一路APN。因此以此为追踪入口。 MmsNetworkManager.java>>>con…

Servlet重定向和转发

重定向和转发的区别 相同点 页面都会实现跳转 不同点 请求转发的时候&#xff0c;URL地址栏不会发生变化重定向的时候&#xff0c;URL地址栏会发生变化 HttpServletRequest代表客户端的请求&#xff0c;用户通过Http协议访问服务器&#xff0c;HTTP请求中的所有信息会被封…