自学内容网 自学内容网

【C++】入门

C++在C语言的基础上进行了优化,从而从C语言的面向过程转变成C++的面向对象

一.C++关键字

C++63个关键字,C语言32个关键字

二.命名空间的含义

C语言中都是使用#Include 头文件,而在后期,代码量越来越多的情况下,可能会出现变量名字跟include 头文件 里面函数名字冲突的情况,就容易报错,所以C++里面使用了命名空间一个概念避免了此问题

关键字:namespace

命名空间中的内容变量等等只能在此空间使用

三.命名空间的使用 

三种方式

1.using namespace 名字

2.using 名字 :: 此名字命名空间里的某个变量名字

3.printf("%d",名字 :: 此名字命名空间里的某个变量名字)

例如

using namespace N

using N::b

printf("%d",N::b);

四.输入和输出

C++的输入输出函数在命名空间里,名字叫做std 

C++将标准库的定义都放在这个命名空间里

C++包含头文件时规定不加.h 旧编译器还可以加,现在不行了

使用输入和输出函数时,必须包含#Include <iostream>头文件 和std 命名空间

输出函数:count<<

count<<"Hello,World"<<endl

endl是换行的意思 也可以使用\n

endl也包含在iostream头文件里面

输入函数:cin>>

int a;

double b;

cin>>a

cin>>a>>b

//cout和cin可以自动识别变量类型,不用像C语言那种写格式符

五.命名空间的使用

日常使用时,推荐使用using std ::cout 和 using std :: cin

不用using namespace std

六 .缺省参数的含义

缺省参数是声明或者定义函数时为函数的参数指定一个缺省值,在调用函数时,如果没有指定的实参,则使用这个缺省值

七.缺省函数的分类 

1.全缺省函数

2.半缺省函数

注意:1.半缺省函数必须从右往左依次来给,不能间隔给 

           2.缺省函数不能在函数和定义中同时出现


以上这种,编译器就不知道该使用那个作为形参了

八.函数重载的含义

1.概念:同名函数,但是这些同名函数的形参的类型,顺序,或者数量不同

2.单独返回值不同,不可以构成函数重载,运行报错 

九函数重载的原理

问题:为什么C语言不支持函数重载,而C++支持呢?

一个程序要运行起来,需要以下几个阶段

预处理、编译、汇编、链接、

C语言跟C++的不同就在汇编完链接这个阶段上,就导致了一个不能重载一个能重载

-------------

在进行汇编后,产生汇编代码,这个时候C和C++的汇编代码产生了差异,他俩的函数名字部分汇编代码不同

-------------

C语言汇编完函数名字还是之前的函数名,而C++汇编完,同名的函数,在汇编代码里面产生了差异,每个同名函数都有自己的名字,这个名字是根据形参来决定的

-------------

所以重载函数必须形参不同,这就导致了C++不会报错,C语言会报错,因为同名名字冲突

-------------

windows和linux系统下,汇编完的函数命名规则不一样,windows的还比较复杂些,难看懂

-------------

十.引用的含义

1.引用不是新定义了一个变量,而是给这个变量起了一个新名字,编译器不会给引用变量开辟空间,他俩共用一块内存空间,就好像跟一个人有好几个外号一样,本人还是他

2.使用:类型& 引用变量名 = 引用实体

3.引用类型必须跟引用实体是一个类型的

4.引用的特性:

引用时必须初始化

一个变量可以有多个引用

引用一旦有了实体就不可以改变,跟指针变量不一样

5.使用场景两种:

做形参可以代替指针

做返回值

如果函数以及使用完毕,出了函数作用域,函数内的变量需要销毁还给系统

换给系统必须传值返回

如果变量还在,还没销毁,则可以用return返回引用类型

 十一.引用和指针

1.引用和指针本质上是一样的,因为在底层汇编后,他俩的代码一致,可以说引用是用指针实现的

2.不同点

十二.内联函数

1.概念:跟C语言的宏函数类似,也是在编译时展开,部分简单函数可以用内联,但是函数代码量必须小于10行,多了的话系统自动按函数使用,不使用内联

因为函数每次使用都需要进行入栈出栈占用时间,部分简单函数用内联可以提高效率

只有在release模式下才行, debug版本需进行一些操作设置

2.使用:inline 函数

3.本质是是以空间换时间的玩法

4.面试题:

宏的优缺点?

优点:

1.提供代码的复用性

2.提高性能

缺点:

1.不方便调试,因为预编译已经替换了

2.代码可读性差,可维护性差。容易误用

3.没有类安全的检查

那些技术可以替代宏?

1.常量定义 const enum

2.内联函数


原文地址:https://blog.csdn.net/iiiiisss/article/details/142927820

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!