重生之我要学C++第一天

news2024/9/22 17:29:05

我重生了,今天开始带着上世纪的回忆重新学习C++

目录

命名空间(namespace)

输入输出流

缺省参数(默认参数)

函数重载


命名空间(namespace)

新定义命名空间是C++为防止对变量,函数,类命名冲突而提出的新的解决措施。是在全局作用域之外的自己定义的属于命名空间自己的 特定域范围。每一个域范围互不干扰,界限分明。使用时可以避免命名冲突

#include<iostream>
using namespace std;
namespace myspace
{
    int a=20;//这个a在命名空间中
    void func()//这个函数在命名空间中
    {
        cout<<"is my func"<<endl;
    }
}
int a=10;//这个a在全局作用域中
void func()//此函数在全局作用域中
{
    cout<<"is your func"<<endl;
}
int main()
{
    cout<<a<<endl;
    func();
    return 0;
}

上图的输出结果是

 由此我们可以看出:全局作用域和命名空间互不干扰,界限分明。默认使用的是全局作用域的变量、函数、类。

那么如何使用命名空间内的变量、函数、类?

命名空间的使用分为三种:1.命名空间全部展开        2.命名空间部分展开        3.指定使用

下面依次说明:

命名空间的全部展开:是直接将命名空间内的变量、函数、类展开到全局作用域范围,使得全局范围的代码可以直接使用命名空间内定义的内容。但是这种方式比较危险,容易和原全局作用域范围内的变量、函数、类名相同,造成矛盾。

#include<iostream>
using namespace std;
namespace myspace
{
    int a = 20;//这个a在命名空间中
    void func()//这个函数在命名空间中
    {
        cout << "is my func" << endl;
    }
}
using namespace myspace;//全部展开方式:using+namespace+命名空间名
int main()
{
    cout << a << endl;//使用的是命名空间的变量和函数
    func();
    return 0;
}

冲突: 如果全局作用域内和命名空间内有相同的变量、函数、类名就不能直接全部展开,否则会出现名字相同的矛盾。

命名空间的部分展开:命名空间的部分展开是将命名空间内的某个变量、函数、类暴露到全局作用域范围。从而使用命名空间。

#include<iostream>
using namespace std;
namespace myspace
{
    int a = 20;//这个a在命名空间中
    void func()//这个函数在命名空间中
    {
        cout << "is my func" << endl;
    }
}
using myspace::a;//部分展开规则:using+命名空间名+::+要使用的变量或函数或类
int main()
{
    cout << a << endl;//这里只能访问到a,不能访问到func()
    return 0;
}

命名空间的指定使用:命名空间的指定使用是不展开命名空间内的任何变量、函数、类。在要使用的地方直接指定使用,要在每一个使用的地方指定。这种方法最繁琐,但是却最安全,没有重名的隐患。 

#include<iostream>
using namespace std;
namespace myspace
{
    int a = 20;//这个a在命名空间中
    void func()//这个函数在命名空间中
    {
        cout << "is my func" << endl;
    }
}
int main()
{
    cout << myspace::a << endl;//指定使用规则:指定的命名空间名+::+变量或函数或类
    myspace::func();
    return 0;
}

命名空间的自动合并

在两个不同文件的两个命名空间,或者同一文件的两个命名空间,如果这两个命名空间的名字相同,命名空间内部将会自动合并。

例如,在一个最简单的C++程序中,

#include<iostream>
#include<stdlib.h>
using namespace std;//合并后共有的std标准命名空间全部展开
int main()
{
    cout<<"hello world"<<endl;
    return 0;
}

这里包含了两个头文件,但是他们内部都共有std这个标准命名空间。他们两个各自的std命名空间就会合并为一个共有的命名空间std。

如何合理应用std?

日常练习中,直接using namespace std将标准命名空间全部展开即可。但是在大型项目中,要谨慎展开,防止std中的名字与项目内的其他全局变量、函数、类名相同。

输入输出流

这里只介绍最基本的C++输入输出

#include<iostream>
using namespace std;
int main()
{
	int a = 0;
	char ch;
	cout << "请输入a" << endl;
	cin >> a;
	cout<< "请输入ch" << endl;
	cin >> ch;
	cout << "a=" <<a << endl;
	cout << "ch=" << ch << endl;
	
	return 0;
}
说明:
1. 使用 cout 标准输出对象 (console out控制台输出 ) cin 标准输入对象 (console in控制台输入 ) 时,必须 包含 < iostream > 头文件,以及按命名空间使用方法使用std(标准命名空间)。
2. cout cin 是全局的流对象, endl 是特殊的 C++ 符号,表示换行输出,他们都包含在包含 <
iostream > 头文件中。
3. << 是流插入运算符, >> 是流提取运算符
4. 使用 C++ 输入输出更方便,不需要像 printf/scanf 输入输出时那样,需要手动控制格式。
C++ 的输入输出可以自动识别变量类型。
5. 实际上 cout cin 分别是 ostream istream 类型的对象, >> << 也涉及运算符重载等知识。 

缺省参数(默认参数)

缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值 。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参。如下
#include<iostream>
using namespace std;
void func(int x=2)
{
    cout<<x<<endl;
}
int main()
{
    func();//没有指定实参,使用缺省值2
    func(1);//指定实参则使用指定实参
    return 0;
}

 

全缺省与半缺省

全缺省:函数参数全部为缺省参数。半缺省:函数部分参数为缺省参数。

注意: 

1. 半缺省参数必须 从右往左依次 来给出,不能间隔着给。
void Func(int a, int b = 10, int c = 20)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }
2. 缺省参数不能在函数声明和定义中同时出现。声明给,定义就不能给。
#include<iostream>
using namespace std;
void func(int x = 2);//函数声明已给缺省参数
void func(int x)//函数定义,这里不可以是缺省参数(int x=2)
{
    cout << x << endl;
}
int main()
{
    func();
    func(1);
    return 0;
}

函数重载

函数重载: 是函数的一种特殊情况, C++ 允许在 同一作用域中 声明几个功能类似 的同名函数 ,这
些同名函数的 形参列表 ( 参数个数 或 类型 或 类型顺序 ) 不同 ,常用来处理实现功能类似数据类型
不同的问题。
1.参数个数不同:
#include<iostream>
using namespace std;
void func()
{
    cout << "null" << endl;
}
void func(int x)
{
    cout << x << endl;
}
int main()
{
    func();//调用无参func
    func(1);//调用有参func
    return 0;
}

2.参数类型不同

#include<iostream>
using namespace std;
void swap(int* a,int* b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
void swap(char* a, char* b)
{
    char tmp = *a;
    *a = *b;
    *b = tmp;
}
int main()
{
    int a = 2, b = 3;
    char c = 'j', d = 'k';
    swap(a, b);//调用int,int的swap
    swap(c, d);//调用char,char的swap
    cout << "a=" << a << " "<< "b=" << b << endl;
    cout << "c=" << c <<" " << "d=" << d << endl;
    return 0;
}

 3.类型顺序不同

#include<iostream>
using namespace std;
void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}
int main()
{
	f(2, 'a');//调用int char的f函数
	f('a', 2);//调用char int的f函数
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/824018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年华数杯建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&#xff0…

版本控制和团队协作:前端工程化的关键要素

文章目录 版本控制系统介绍&#xff08;如 Git&#xff09;1. 分布式系统2. 分支管理3. 版本控制4. 快速和高效5. 社区和生态系统 分支管理和团队协作流程1. 主分支2. 功能分支3. 开发工作4. 合并到develop5. 发布准备6. 发布 持续集成与持续部署实践持续集成&#xff08;CI&am…

LeetCode·每日一题·2681. 英雄的力量·脑筋急转弯

题目 示例 思路 代码 static const int MOD 1e9 7; int cmp(const void *a, const void *b) {return *(int *)a - *(int *)b; } int sumOfPower(int* nums, int numsSize){qsort(nums, numsSize, sizeof(nums[0]), cmp);//排序long long ans 0, s 0;for (int x 0; x <…

C++ 虚函数详解(动态绑定)

动态绑定 虚函数的作用主要是实现了多态的机制。关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数。我们在使用基类的引用&#xff08;指针&#xff09;调用虚函数时&#xff0c;就会发生动态绑定。所…

快速开发人脸识别系统Java版本

简介&#xff1a; 先说下什么是人脸识别系统&#xff1a;举个例子&#xff0c;公司门口有个人脸识别系统&#xff0c;员工站到门口&#xff0c;看着摄像头&#xff0c;大屏幕上会抓拍到你的人脸&#xff0c;然后和公司的员工照片库里的照片比对&#xff0c;比对成功就提示&…

哪些行业适合使用PDM系统

在现代数字化时代&#xff0c;PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;以其强大的功能和灵活的特性&#xff0c;成为各个行业提高生产效率和管理水平的得力工具。那么&#xff0c;哪些行业适合使用PDM系统呢&#xff1f;让我们一同深入…

Django使用用户列表的展示和添加

接着上一篇&#xff1a;https://blog.csdn.net/javascript_good/article/details/132027702 来实现用户表的查询和添加 1、创建数据库表 在models.py 中&#xff0c;增加UserInfo类&#xff0c;包括字段姓名、密码、年龄、账号余额、入职时间、所属部门、性别 verbose_name 就…

选读SQL经典实例笔记15_窗口函数

1. 分组 1.1. 把相似的行数据聚集在一起 2. SQL分组的定义 2.1. 数学上的“群”&#xff08;group&#xff09;定义为 (G, •,e)&#xff0c;其中G是一个集合&#xff0c;• 表示G的二进制运算&#xff0c;而e则是G中的成员 2.2. 一个SQL 分组须满足的两个定理 2.2.1. 对于…

计算机毕设 深度学习手势识别 - yolo python opencv cnn 机器视觉

文章目录 0 前言1 课题背景2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存 5 模型训练5.1 修…

好用的Linux远程工具

你好&#xff0c;我是Martin&#xff0c;今天给大家介绍几款主流的远程工具。 远程工具介绍 关于远程连接的用户分类时这样的&#xff0c;通常需要进行远程连接的人有两类&#xff0c;一类是系统管理员&#xff0c;另一类是普通的用户。远程连接工具是一些可以让你通过网络连接…

md5sum

概念作用及原理 md5sum是一种常用的哈希算法&#xff0c;用于计算数据的MD5哈希值。MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种广泛使用的加密散列函数&#xff0c;用于将任意长度的数据映射为固定长度的哈希值&#xff08;通常是128位&#xff09;。这个哈…

html学习5(表单)

1、表单是一个包含表单元素的区域&#xff0c;用于收集用户的输入信息。 2、表单元素是允许用户在表单中输入内容&#xff0c;比如&#xff1a;文本域&#xff08;textarea&#xff09;、下拉列表&#xff08;select&#xff09;、单选框&#xff08;radio-buttons&#xff09…

python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表

#!/user/bin/evn python import os,re,openpyxl 输入&#xff1a;帆软脚本文件路径输出&#xff1a;帆软文件检查结果Excel#获取来源表 def table_scan(sql_str):# remove the /* */ commentsq re.sub(r"/\*[^*]*\*(?:[^*/][^*]*\*)*/", "", sql_str)# r…

Linux中的file命令:查看文件类型

2023年8月1日&#xff0c;周二上午 目录 简要说明使用方法MIME类型举例说明 简要说明 在Linux中&#xff0c;file命令用于识别文件类型。 file命令可以识别各种类型的文件&#xff0c;包括普通文件、目录、符号链接、设备文件、压缩文件、二进制可执行文件等。 它是一个非常…

Vue 入门和基础语法(一)

一、入门 Vue 不支持 IE8 及以下的版本&#xff0c;因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性&#xff0c;但它支持所有兼容 ECMAScript 5 的浏览器。 1.1、创建 Hello Vue Vue.js 的核心是实现了 MVVM 模式&#xff0c;它扮演的角色就是 ViewModel 层&#xff0c;那…

ChatGPT安全技术

前言 近期&#xff0c;Twitter 博主 lauriewired 声称他发现了一种新的 ChatGPT"越狱"技术&#xff0c;可以绕过 OpenAI 的审查过滤系统&#xff0c;让 ChatGPT 干坏事&#xff0c;如生成勒索软件、键盘记录器等恶意软件。 他利用了人脑的一种"Typoglycemia&q…

Github Pages自定义域名

Github Pages自定义域名 当你想在网上发布内容时&#xff0c;配置Github Pages是一个很好的选择。如果你想要在自己的域名上发布&#xff0c;你可以使用Github Pages来创建自己的网站。本文将介绍如何使用Github Pages自定义域名。 这里呢先列出前置条件&#xff1a; 您的Gi…

【二进制安全】堆漏洞:Double Free原理

参考&#xff1a;https://www.anquanke.com/post/id/241598 次要参考&#xff1a;https://xz.aliyun.com/t/6342 malloc_chunk 的源码如下&#xff1a; struct malloc_chunk { INTERNAL_SIZE_T prev_size; /*前一个chunk的大小*/ INTERNAL_SIZE_T size; /*当前chunk的…

偶数科技亮相第十届中国中小企业投融资交易会

第十届中国中小企业投融资交易会暨2023“小企业 大梦想”高峰论坛近日在北京举办。本届大会以“金融活水精准滴灌 专精特新体制增量”为主题&#xff0c;通过展览展示、论坛活动、项目路演、产融对接等形式&#xff0c;搭建了专精特新企业与金融机构之间、与地方政府之间的产融…

深入理解CountDownLatch计数器

入理解CountDownLatch计数器 其他知识点 Java 多线程基础 深入理解aqs ReentrantLock用法详解 深入理解信号量Semaphore 深入理解并发三大特性 并发编程之深入理解CAS 深入理解CountDownLatch Java 线程池 使用用法 CountDownLatch用法详解 CountDownLatch实现原理 下面例子来…