初步接触C++

hello,各位小伙伴,本篇文章跟大家一起学习C++,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 !

文章目录

  • 初步区别C语言和C++
  • 命名空间
    • 1.命名空间的定义
    • 2.命名空间的使用
  • C++的输入输出
  • 缺省参数
    • 1.缺省参数的概念
    • 2.缺省参数的分类

初步区别C语言和C++

对于之前学的C语言,C++的关键字接近是C语言的2倍,C++对于C语言有兼容性,所以在C++里有些关键字和语法和C语言是一样的。C++就是C语言的升级版,解决了C语言中的一些比较麻烦的问题。

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

命名空间

命名空间的存在就是为了避免变量、函数以及后面会学的类的名称发生冲突,所以出现了关键字namespace

这些变量、函数和类的名称将都存在于全局作用域中

举个冲突的例子

#include <stdio.h>
#include <stdlib.h>
int rand = 10;//rand是存在于函数库中的一个函数
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:“rand”: 重定义;以前的定义是“函数”

1.命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
在一个命名空间(Namespace)里的成员可以是变量、函数、类、结构体等

例如:

namespace Pakho//Pakho是命名空间的名字,可以自己随便取
{
	int rand = 10;//将上述的问题就这样解决了,这里的rand不再是函数

	int Add(int x,int y)//函数
	{
		return x + y;
	}

	struct Node//结构体
	{
		struct Node* next;
		int data;
	};
}

命名空间也可以嵌套:

namespace Pakho
{
	int Add(int x,int y)//函数
	{
		return x + y;
	}

	namespace Sherry
	{
		struct Node//结构体
		{
		struct Node* next;
		int data;
		};
	}
}

要注意:同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中
例如,下面的两个Pakho会被合并成同一个命名空间

namespace Pakho
{
	int Add(int x,int y)//函数
	{
		return x + y;
	}
}
namespace Pakho
{
	struct Node//结构体
	{
		struct Node* next;
		int data;
	};
}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

2.命名空间的使用

怎么使用命名空间了的成员呢?
例如:

namespace Pakho
{
	int rand = 10;

	int Add(int x,int y)
	{
		return x + y;
	}

	struct Node
	{
		struct Node* next;
		int data;
	};
}

int main()
{
	//编译器会报错,Add和rand为未声明的标识符(无法识别Add和rand)
	res = Add(1,rand);
	printf("res = %d\n",res);
	return 0;
}

命名空间的使用有三种方式:

在C++编程语言中,:: 是作用域解析运算符的符号。在C++中,:: 用于访问命名空间、类、结构体或枚举类型中的成员。

1.加命名空间名称及作用域限定符:

int main()
{
	printf("rand = %d\n",Pakho::rand);
	//rand属于命名空间Pakho
	return 0;
}

2.使用using将命名空间中某个成员引:

using Pakho::rand;
//使用命名空间中的rand
int main()
{
	printf("rand = %d\n",rand);
	return 0;
}

3.使用using namespace 命名空间名称 引入:

using namespace Pakho;
//使用命名空间Pakho
int main()
{
	printf("rand = %d\n",rand);
	return 0;
}

所以即使变量、函数和类的名称发生冲突,只要将他们分装在不同的命名空间,就解决了这个问题,如:

namespace Pakho
{
	int Add(int x,int y)
	{
		return x + y;
	}
}
namespace Sherry
{
	int Add(int x,int y)
	{
		return x + y + 10;
	}
}

int main()
{
	int res1 = Pakho::Add(1,2);
	int res2 = Sherry::Add(1,2);
	printf("res1 = %d\n",res1);
	printf("res2 = %d\n",res2);
	return 0;
}

C++的输入输出

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{
	int a = 0;
	cin>>a;
	cout<<"Hello world!!!"<<endl;
	return 0;
}

cin是C++中的输入(标准输出对象(控制台)),cout是C++中的输出(和cin标准输入对象(键盘)),在使用时必须要必须包含头文件<iostream>头文件并且按命名空间的使用方法使用std
所以也可以这样写:

#include<iostream>

int main()
{
	int a = 0;
	std::cin>>a;
	std::cout<<"Hello world!!!"<<endl;
	return 0;
}

一般日常练习推荐使用using namespace std

endl:是特殊的C++符号,表示换行输出,包含在包含<iostream>头文件中。
<<是流插入运算符,>>是流提取运算符。
相比于C语言的sacnfprintf,C++的输入输出可以自动识别变量类型,不需要像C语言一样手动控制格式。

缺省参数

1.缺省参数的概念

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

例如:

int Add(int x = 5,int y = 10)
{
	return x + y;
}

int main()
{
	int res1 = Add();//当没有传参时,使用参数的默认值
	int res2 = Add(1,1);//传参时,使用指定的实参
	cout<<"res1 = "<<res1<<endl;
	cout<<"res2 = "<<res2<<endl;
	return 0;
}

打印结果为res1 = 15,res2 = 2。

2.缺省参数的分类

全缺省参数:

int Add(int x = 5,int y = 10)
{
	return x + y;
}

int main()
{
	int res1 = Add();//当没有传参时,使用参数的默认值
	int res2 = Add(1,1);//传参时,使用指定的实参
	cout<<"res1 = "<<res1<<endl;
	cout<<"res2 = "<<res2<<endl;
	return 0;
}

半缺省参数:

int Add(int x,int y = 10)
{
	return x + y;
}

int main()
{
	int res1 = Add(5);//当y没有传参时,使用参数的默认值
	int res2 = Add(1,1);//传参时,使用指定的实参
	cout<<"res1 = "<<res1<<endl;
	cout<<"res2 = "<<res2<<endl;
	return 0;
}

要注意:

  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
    例如:
int Add(int x = 10,int y)//这样写是错误的
{
	return x + y;
}

int main()
{
	int res1 = Add(,5);//这样写是错误的
	return 0;
}
  1. 缺省参数不能在函数声明和定义中同时出现
    例如:
int Add(int x,int y = 10);
int Add(int x,int y = 20)
{
	return x + y;
}
//如果生命与定义位置同时出现,恰巧两个位置提供的值不同,
//编译器无法确定是使用哪个缺省值
  1. 缺省值必须是常量或者全局变量
  2. C语言不支持(编译器不支持)

好啦,本章对于C++的学习就先到这里,如果有什么问题,还请指教指教,希望本篇文章能够对你有所帮助,我们下一篇见!!!

如你喜欢,点点赞就是对我的支持,感谢感谢!!!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python Flask-Mail实现邮件发送

一、邮件发送的扩展 关于如何找到flask发送邮件的插件&#xff1f;&#xff0c;上一篇已经分享了如何找到第三方插件&#xff0c;也找到了插件flask-mail的使用文档&#xff0c;那我们就来实战吧 二、根据文档&#xff0c;总结发送邮件的流程 从文档中可以总结出发送邮件的步…

【进程控制】谈谈进程终止的三种状态

文章目录 进程终止退出码信号信号术语 进程常见的退出方法exit函数与_exit函数的区别对比exit和_exit函数对于缓冲区的处理 进程终止 进程终止&#xff0c;也就是进程运行结束。结束有两种含义&#xff0c;一种是“正常”结束&#xff0c;带有结果&#xff0c;即代码运行完毕。…

第十三届蓝桥杯省赛C++ A组 Java A组/研究生组《推导部分和》(C++)

【题目描述】 【输入格式】 【输出格式】 【数据范围】 【输入样例】 5 3 3 1 5 15 4 5 9 2 3 5 1 5 1 3 1 2 【输出样例】 15 6 UNKNOWN 【思路】 题解来源&#xff1a;AcWing 4651. $\Huge\color{gold}{推导部分和}$ - AcWing 【代码】 #include<bits/stdc.h> #define…

使用itext-core生成PDF

1、添加引用依赖包 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>8.0.3</version><type>pom</type></dependency> 2、上代码 package com.student.demo.pdf;impor…

C# 登录界面代码

背景 MVVM 是一种软件架构模式&#xff0c;用于创建用户界面。它将用户界面&#xff08;View&#xff09;、业务逻辑&#xff08;ViewModel&#xff09;和数据模型&#xff08;Model&#xff09;分离开来&#xff0c;以提高代码的可维护性和可测试性。 MainWindow 类是 View&a…

红胖子创业第三年总结:保守稳定客户,技术业务认可,口碑业务增长,国内创业真相,减少外协占比,投入研发产品,寻求资本渠道,享受快乐自由

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/137067698 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子网络科技博…

计算机网络01-20

计算机网络01-20 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是&#xff1f;各自的功能是什么&#xff1f;2、说一下一次完整的HTTP请求过程包括哪些内容&#xff1f;孤单小弟 —— HTTP真实地址查询 —— DNS指南好帮手 —— 协议栈可…

Java八股文(Elasticsearch)

Java八股文のElasticsearch Elasticsearch Elasticsearch 什么是Elasticsearch&#xff1f; Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;用于实时存储、搜索和分析大规模数据集。 Elasticsearch的主要特点是什么&#xff1f; Elasticsearch的主要特点包括&…

【线上环境更换国产麒麟银河服务器之后FTP无法解析文件字符串的问题】

默认使用的 UnixFTPEntryParser没有办法解析麒麟系统下的文件字符串&#xff01;&#xff01;&#xff01; 所以通过设置FTPClientConfig设置系统编码解析类型 FTPClientConfig conf new FTPClientConfig(FTPClientConfig.SYST_NT);ftpClient.configure(conf);好了&#xff0c…

flutter布局更新

理论上&#xff0c;某个组件的布局变化后&#xff0c;就可能会影响其他组件的布局&#xff0c;所以当有组件布局发生变化后&#xff0c;最笨的办法是对整棵组件树 relayout&#xff08;重新布局&#xff09;&#xff01;但是对所有组件进行 relayout 的成本还是太大&#xff0c…

python初体验

Python初学者之旅&#xff1a;从零开始的编程世界探索 开篇词 欢迎来到Python编程的世界&#xff01;作为一名初学者&#xff0c;你也许对这个简洁明了、功能强大的编程语言充满了好奇与期待。Python以其易于理解的语法、丰富的标准库及活跃的社区深受全球开发者喜爱&#xff…

Linux下线程池详解与实现:提升多任务处理效率的关键

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マイノリティ脈絡—ずっと真夜中でいいのに。 0:24━━━━━━️&#x1f49f;──────── 4:02 &#x1f504; ◀…

隐蔽处工程监管系统

随着科技的飞速发展&#xff0c;信息化、智能化已经成为各行各业发展的必然趋势。在工程建设领域&#xff0c;传统的监管方式已经难以满足现代工程管理的需求。为了提高工程监管的效率和精度&#xff0c;信鸥科技倾力打造了一款全新的工程监管系统&#xff0c;为工程建设行业带…

Weaviate

文章目录 关于 Weaviate核心功能部署方式使用场景 快速上手 &#xff08;Python)1、创建 Weaviate 数据库2、安装3、连接到 Weaviate4、定义数据集5、添加对象6、查询1&#xff09;Semantic search2) Semantic search with a filter 使用示例Similarity searchLLMs and searchC…

金蝶BI方案治好我的数据分析困难症

结构分析、趋势分析、分布分析、对比分析……这还是大方向的&#xff0c;细分下来还会根据数据类型和具体场景不同而不同&#xff0c;不仅如此&#xff0c;每个月的数据分析需求还可能不同&#xff0c;导致分析量多且复杂&#xff0c;加班加点也忙不过来。但金蝶BI方案就不一样…

构造函数与析构函数的显示调用

目录 前言&#xff1a; 构造函数的显示调用 显示调用无参构造 隐式调用无参构造 显示调用有参构造 构造函数的执行顺序 析构函数的显示调用 析构函数的调用顺序 显示调用析构函数 前言&#xff1a; 构造函数是类的特殊成员函数&#xff0c;创建对象时编译器会自动调用…

win10开启了hyper-v,docker 启动还是报错 docker desktop windows hypervisor is not present

问题 在安装了docker windows版本后启动 docker报错docker desktop windows hypervisor is not present 解决措施 首先确认windows功能是否打开Hyper-v 勾选后重启&#xff0c;再次启动 启动后仍报这个错误&#xff0c;是Hyper-v没有设置成功 使用cmd禁用再启用 一.禁用h…

oracle docker安装

修改下载的Image的REPOSITORY和TAG属性 修改下载的Image的REPOSITORY和TAG属性&#xff1a;docker tag <IMAGE ID> <REPOSITORY NAME> docker tag 3fa112fd3642 aliyun/oracle_11g 参考网址 使用docker images时&#xff0c;可能会出现REPOSITORY和TAG均为none的镜…

【JVM】JVM 运行时数据区简介

文章目录 &#x1f334;简介&#x1f332;堆&#xff08;线程共享&#xff09;&#x1f384;本地方法栈&#xff08;线程私有&#xff09;&#x1f333;程序计数器&#xff08;线程私有&#xff09;&#x1f340;方法区&#xff08;线程共享&#xff09;&#x1f338;JDK 1.8 元…

文件的读取与操作

文件类型&#xff1a; 从文件功能的角度来分类&#xff1a; 1.程序⽂件 程序⽂件包括源程序⽂件&#xff08;后缀为.c&#xff09;,⽬标⽂件&#xff08;windows环境后缀为.obj&#xff09;,可执⾏程序&#xff08;windows 环境后缀为.exe&#xff09;。 2. 数据⽂件 ⽂件…