1. C语言是面向过程的语言,C++是面向对象的语言,相对于C语言来说,C++语法规则更为严格,其存在类型增强的问题。

类型增强,顾名思义就是C++相对于C语言来说有更加严格的类型检查,很多C语言的语法实际上是不够严谨的,但是编译的过程中只是会有警告而不会报错,但是C++中就会报错。例如以下几种例子均可以说明C++相比C语言来说类型增强了。

(1)在C语言中进行堆空间分配的过程中,写成以下格式也是可以实现的

但是实际上这存在数据类型不一致的情况,存在将void *的数据分配给char *的情况,因此规范的写法应该是malloc之前是应该进行强转使分配的空间类型和char*类型是一样的应该写成char *p=(char *)malloc(100),在C语言中只会显示出警告,但是在C++中就会报错,说明C++相比C数据增强

(2)对于const类型数据是否初始化,语句const int a在C语言中会显示警告,因为const int a如果在定义的时候不进行初始化,以后就没有机会进行初始化了,但是C++ 类型检查时直接使此条语句编译不过去

2. 相对于C语言来说,增加了布尔类型,使程序可读性增强

3. 增加表达式赋值的方式,以下表达式如图

这是一个赋值表达式,c=100 ,将100赋值给表达式a=b,因此a=100而b没有具体的值,表达式可以被赋值的原因是表达死返回了一个引用

4.

  1. C++标准输入与输出

scanf

printf

cin

cout

函数

类对象

>>流输入运算符,就可以不用C语言中的scanf使得输入输出更加简洁,cin和cout都是属于命名空间std中的内容

5. 字符串的输入输出,在C语言中,我们常见的是scanf(),gets()都是不安全的,只有用fgets()才是安全的,在C++中常见的就是cin和cout,但是其相对于字符串的输入来说是不安全的。在C++中,我们定义了string类型,因此有种安全的输入方法为

6. 输出相关设置

(1)输出进制设置

(2)设置域宽和左对齐

(3)设置填充

(4)设置有效数字和设置保留几位小数

7. 函数重载

(1)  函数重载会出现重名的函数,重名的函数会根据语境来调用

(2)  运算符重载也是一种函数重载,函数重载也是一种简洁的需要

(3)函数重载的规则

a. 函数名相同

b. 函数的参数类型,个数,顺序不同均可以构成重载

c. 函数返回值不同不可以作为函数重载的标志

(4)重载匹配规则

a. 严格匹配

b. 严格匹配不满足,寻求是否有隐式转换

c. int ->double,long,double->int,float,int->short,char等隐式类型转换,重载时遇到这些情况,都会出现二义性

(5)函数重载底层实现,C++利用Name Mangling(命名倾轧)技术,来改变函数名,区分参数不同的同名函数,实现原理:用v-c-i-f-l-d表示void char int float long double及其引用,具体平台实现有差异

9. extern C

使用extern “C”的原因是C++为了完全兼容C,更深入地理解就是:C++默认对所有的函数进行倾轧,但是C是不对文件进行倾轧的,因此在C++包容C 时会对其头文件进行命名倾轧,但是C 的库没有进行命名倾轧,为了解决这个问题,引入extern “C”

10. 运算符重载

C++提供了运算符重载机制,比如说我们最常见的>>和<<原本是右移和左移操作,但是在C++中,被重载成了输入和输出操作,

11. 默认参数

通常情况下,函数在调用时,形參从实参那里取值,c++给出了可以不从实参取值的方法,给形參以默认值。

12. 默认规则

(1)从右到左,不能跳跃

(2)实参+默认>=形參的个数

(3声明和实现在一起时,默认,若声明在前,定义在后,默认参数出现在声明当中

分别对这些规则进行解释

a. 从右往左,不能跳跃

当在定义函数有多个函数时,赋值应该是从右往左赋值,如

void(int a,int b,int c)中国,若设置默认参数时设置为void(int a,int b,int c=1),这种方式称之为从右往左

若设置默认参数时设置为void(int a,int b=2,int c=1)也是可以的,但是若要将其设置为void(int a=1,int b,int c=1)就是不可以的,这就是不能跳跃规则

结合以上我们可以得出在默认参数的设置时:从右往左,不能跳跃

b. 实参+默认>=形參

如上图所示,第一个foo()中,由于本身的默认参数有两个,实参个数为0,小于形參的个数,因此是不可以的,后面几个都是正确的,这就是所谓的实参+默认>=形參规则

13. 规则冲突:当实现同一功能,既可以用默认参数,又可以用重载的时候,推荐使用默认参数

14. 引用

(1)定义

变量名本质上就是一段内存的引用,即别名,如int a=100;这是其向内存申请了4个字节来放属于int型的100这个数,但是为了避免直接和内存打交道,因此引入一个变量名(别名),来代替所申请的这4个字节的内存空间,在此处引入的引用,是为已有变量起一个别名。对已有变量起一个别名,就叫引用。引用的声明如下:

int a;

int &ra=a;

此时ra和a是等价关系,都代表内存中的四个字节

(2)引用规则

(a)  是一种声明关系,不开辟空间,必须要初始化,不能单独存在,与被别名的变量拥有相同的数据类型

(b)  声明关系,一旦确立,不可变更

(c)  可以对引用,再次引用,也就是对一个变量,可以建立多个引用,此时引用间是种平行关系

下面分别对其进行说明

(a)输入以下程序进行验证

运行程序可得a和ra,&a和&ra,sizeof(a)和sizeof(ra)的值是一样的,这就可以说明引用是一种声明关系,其不开劈空间并且引用和被别名的变量拥有相同的数据类型。

(3) 可以对引用,再次引用

如上xra,yra,zra都是一种平行关系

(3) &常见的三种用法:取地址(int a;int p=&a),按位与,引用(double mm;double &rm=mm)

(4) 传引用,等价于传作用域,把一个变量以引用的方式传到另一个作用域,就等价于扩展了该变量的作用域,因此利用引用,之前写的swap函数就可以不再使用指针来进行

a与&ra,b与&rb之间建立了连接,引用的从宏观上可以理解为,扩展了变量的作用域,传参后,就像在本地解决问题一样。避免了传n级指针,解决n-1级指针的问题,即平级内解决问题

(5)下面我们将区分几个很拗口的说法:

a. 指针的引用->有,引用的指针->无

b. 指针的指针->有,引用的引用->无

c.  指针的数组->有,引用的数组->无

C++基础知识--DAY1的更多相关文章

  1. 9-Python基础知识-day1

    Python基础知识-day1 Python 2 和Python 3 的区别: Python2 源码不标准,混乱,重复代码多:#-*-encoding:utf8 -*- 解决python2显示中文的问 ...

  2. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  3. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  4. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  5. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  6. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  7. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  8. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

随机推荐

  1. 微服务架构中APIGateway原理

    背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest ...

  2. 四、Mysql主从同步

    一.MySQL Replication介绍 MySQL Replication 官方文档 Replication可以实现将数据从一台数据库服务器(master)复制到一或多台数据库服务器(slave) ...

  3. web跨域请求

    第一种情况: 1. sina.com=====>baidu.com/xxx.jsp 也就是前面的域名不相同,(url第三根斜杠之前的内容,也就是主机) 2:localhost =====> ...

  4. string.Format出现异常:输入字符串的格式不正确 Exception during StringFormat

    错误信息:Exception during StringFormat:输入字符串的格式不正确 “System.FormatException”类型的未经处理的异常在 mscorlib.dll 中发生 ...

  5. Android SDK Mirror

    Android SDK Manager - Tools - Option - Proxy Settings - HTTP Proxy Server mirrors.zzu.edu.cn Force H ...

  6. JarvisOJ Basic 美丽的实验室Logo

    出题人丢下个logo就走了,大家自己看着办吧 扔进01Editor中,发现最后有14844个不属于jpg的字节 扔进Kali中用dd命令提取出附加的文件,可以看到也是一个图片,图片上的文字即是flag

  7. PLsql链接oracle配置

    在Oracle的安装文件下查找tnsnames.ora文件 如果真的找不到路径,建议大家在Oracle安装位置全文搜索tnsnames.ora 配置格式 个人配置 下载并安装PL/SQL,成功安装后配 ...

  8. BZOJ2616 SPOJ PERIODNI(笛卡尔树+树形dp)

    考虑建一棵小根堆笛卡尔树,即每次在当前区间中找到最小值,以最小值为界分割区间,由当前最小值所在位置向两边区间最小值所在位置连边,递归建树.那么该笛卡尔树中的一棵子树对应序列的一个连续区间,且根的权值是 ...

  9. 洛谷3703 [SDOI2017] 树点染色 【LCT】【线段树】

    题目分析: 操作一很明显等价于LCT上的access操作,操作二是常识,操作三转化到dfs序上求最大值也是常识.access的时候顺便在线段树中把对应部分-1,把右子树的子树+1即可. 代码: #in ...

  10. python的if not用法

    python里的if not的用法: None,False,0,空列表[],空字典{},空元祖(),都相当于false print('not x 打印出来的结果',not x) x =[1] prin ...