| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++入门基础(上) -> 正文阅读 |
|
[C++知识库]C++入门基础(上) |
先来说说什么是C++. 什么是C++
C++关键字c++关键字如下:
?命名空间为什么要存在命名空间?
命名空间定义
1.先来看命名空间的定义 普通的命名空间
命名空间可以嵌套
同一个工程允许存在多份命名空间
这里我们写一段测试程序试一下.
如果可以运行则说明结论正确. 和我们预想的一样.
命名空间使用既然我们定义了命名空间,那么我们改怎么使用它呢? 有如下三种办法: 1.加命名空间名称及域访问限定符(::)刚才其实已经使用了一下,现在正式讲一下 既然每一块命名空间都是一个独自的作用域,那么如果多个命名空间里有多个相同的变量a怎么办? 那我们要直接访问a,编译器怎么知道我们想访问的是哪个a呢,所以须在变量名前加上: 命名空间和域访问限定符 代码如下:
我们运行一下 406,609。结果完全正确? 2.使用using将命名空间导入我们发现,每次访问命名空间的成员,都要加限定符::,如果频繁的访问命名空间里的某个成员,这样写就会太繁琐,所以我们使用using这个关键字来解决. 格式为: using 命名空间名称::成员变量 看以下代码来理解
但是如果有重新定义的局部变量,则局部变量优先 代码如下来解释:
运行结果如下: 这就是using的使用了. 3.使用using namespace 命名空间引入如果想把整个命名空间里的内容都导入,而不是单纯的几个变量,那么格式如下: using namespace 命名空间名称. C++自带一个标准命名空间?std,里面包含了各种常用的函数 例如cout,cin,endl这些等等. 可以发现我之前使用cout和endl的时候都加着std:: 因为它是std命名空间里的 所以如果我们每次想直接使用这些函数,而不想加std::,则可以按刚才所说的 using namespace std; 这样就把std命名空间里的函数导入到这个工程中了.后面再用cin,cout这些函数时直接调用即可. 这也是为什么之前有见过C++的程序,为什么要在程序的前面加一个 using namespace std了. C++的输入和输出
使用C++输入输出更加方便一些. 不需要手动控制数据类型输入输出.
缺省参数
意思是呢,如果你没有给它传参数,他就会采用给取的默认值. 看下面例子先来简单认识一下:
输出结果: 可以发现第一次调用print函数的时候,没有给参数,所以编译器就会采用给取的默认值0. 第二次调用给了一个参数10,所以编译器使用指定的实参10,并输出出来. 缺省参数的分类全缺省参数既函数里面每个参数都有给定默认值. 如下:
?半缺省参数需要注意的是半缺省参数并不是一般的参数是缺省的,而是一部分参数是缺省的. 1.半缺省参数必须是从右向左依次给出缺省值,不能有间隔. 2.缺省参数不能在函数声明和定义同时出现???????? 3.缺省值必须是常量或全局变量 4.C语言不支持缺省参数 正确应用:
错误示范:
函数重载
函数重载概念
注意上面说的同名函数里面没有说返回值不同构成重载.? 和返回值无关. 例如下面几个函数:
上面几个函数都构成重载,第一个和第二个参数类型不同,第一个和第三个参数数量不同. 这样就对重载有了一个大概的认识了. 那么编译器怎么知道要调用哪个函数呢? 编译器会根据传入的参数数量和类型自动选择最匹配的函数进行调用. 名字修饰为什么C++会支持函数重载,而C语言不支持函数重载呢? 在C/C++中,一个程序要运行起来,需要经历以下阶段: 预处理、编译、汇编、链接 ?这里简单说一下各阶段所做的事情
1. 实际我们的项目通常是由多个头文件和多个源文件构成,而通过我们C语言阶段学习的编译链接,我们可以知道,【当前a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么怎么办呢? 2. 所以链接阶段就是专门处理这种问题,链接器看到a.o调用Add,但是没有Add的地址,就会到b.o的符号表中找Add的地址,然后链接到一起 3. 那么链接时,面对Add函数,连接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规则。 5. 通过下面我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长+函数名+类型首字母】 先来看看采用c语言编辑器编译之后的结果: ?
而c++编译之后的结果如下:
这就是为什么C++可以函数重载,而C语言不可以了. 因为最后链接符号表找函数时,C语言的符号表里函数只要名字相同,无论参数多少,类型,都只是存放它的名字。所以无法识别参数的类型或数量 而C++链接时符号表里,不仅保存了函数的名字,还保存了参数的各种类型和数量,这就与其它重名函数但参数有差别的函数区分开了,所以C++支持重载. extern"C"?
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:44:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |