初识C++(1)

C++是在C语言的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库以及编程范式等。

在C语言中,变量、函数和类的名称存在于全局作用域中,因此可能会发生许多冲突。比如:

#include<stdio.h>
#include<stdlib.h>

int rand = 10;

int main()
{
    printf("rand = %d\n",rand);

    return 0;
}

在上述代码中,当不包含头文件stdlib.h时并不会报错,如图:

但一旦包含头文件stdlib.h,当定义变量rand时,会产生报错,如图:

因此 ,为了使标识符的名称进行本地化,以避免命名冲突或名字污染,C++就提出了namespace(命名空间)这一关键字

一、命名空间

1.命名空间的定义

定义命名空间,需要用到namespace这一关键字,然后再namespace后面接该命名空间的名称,然后再后面加上{},其中{}内的内容就是命名空间的成员。其中命名空间内可以定义变量、函数和结构体

命名空间的定义:

namespace ads
{
	int rand = 10;//变量

	int Add(int a, int b)//函数
	{
		return a + b;
	}

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

并且命名空间是可以嵌套的,如:

namespace ads
{
	int rand = 10;
	int Add(int a, int b)
	{
		return a + b;
	}

	namespace n1
	{
		int rand = 10;
		int Add(int a, int b)
		{
			return a + b;
		}
	}
}

注:1.在同一个工程中,允许存在多个相同名称的命名空间,编译器最后会将其合并成一个命名空间。2.一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

2.命名空间的使用

namespace ads
{
	int a = 10;
	int Add(int a, int b)
	{
		return a + b;
	}
	struct Node
	{
		int val;
		struct Node* next;
	};
}

int main()
{
	printf("rand = %d\n", a);
	return 0;
}

当运行上述代码时,会报错:。因此在使用命名空间内的成员时,我们有三种方法:

//1.使用作用域限定符调用
//形式:命名空间名称::调用的变量或函数
int main()
{
	printf("rand = %d\n", ads::a);
	return 0;
}
//2.使用using将命名空间中的某个成员引入
using ads::a
int main()
{
	printf("rand = %d\n", a);
	return 0;
}
//3.使用using函数直接将命名空间内全部变量引入
using namespace ads
int main()
{
	printf("rand = %d\n", a);
	return 0;
}

二、C++的输入以及输出

在C语言中,我们使用scanf和printf来进行输入和输出,如:

#include<stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}

而在C++中,我们使用cin和cout函数进行输入输出,在使用cin和cout函数时,必须要包含头文件<iostream>以及按照命名空间的方式来使用std,如:

#include<iostream>
using namespace std; //std是C++标准库的命名空间名
                     //C++将标准库的定义实现都放到这个命名空间中
int main()
{
	cout << "hello world" << endl;//endl在C++中表示换行,与\n相同
	return 0;                     //'<<'是流插入运算符,'>>'是流提取运算符
}

C++的输入和输出相比C语言的scanf和printf更加的方便,cin和cout在输入输出时不需要手动输入格式,他可以自动识别变量类型。

注:std是C++标准库的命名空间,在日常练习中,我们可以直接用using namespace std直接展开,方便使用。但在项目开发中,我们应避免全部展开,因为如果我们定义的对象和库中重名的类型、对象和函数,就会发生冲突问题。因此我们可以使用std::cout或using std::cout展开常用的库对象、类型等。

三、缺省参数

3.1缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定的一个缺省值。在调用该函数时,如果没有指定实参,那就采用该形参的缺省值;若指定了实参,则用实参。代码如:

int Add(int a = 0, int b = 2)
{
	return a + b;
}

int main()
{
	int sum = Add();//没有实参时,使用形参
	cout << "Add() = " << sum << endl;
	sum = Add(2, 3);//有实参时,使用实参
	cout << "Add(2,3) = " << sum << endl;
	return 0;
}

运行结果:

3.2缺省参数的分类

  • 全缺省参数
void Func(int a = 1, int b = 2, int c = 3)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
  • 半缺省参数(部分缺省参数)
//半缺省参数必须从右往左依次给出,不能间隔着给
void Func(int a, int b = 2, int c = 3)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

缺省参数不能在函数声明和函数定义中同时出现,并且缺省参数只能出现在函数声明中,不能出现在函数定义中 。

缺省值必须是常量或全局变量

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

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

相关文章

Axure9生成的阅览页面如何自动展开左侧页面导航?

问题 Axure9生成的阅览页面&#xff0c;默认情况是自动折叠的&#xff0c;如何自动展开左侧页面导航&#xff1f; 解决 Axure工具&#xff1a;发布 > 预览选项 > 播放器 > 打开页面列表

LeetCode:700. 二叉搜索树中的搜索

目录 题目描述: 代码: 题目描述: 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,3…

架构图解析:如何构建高效的微服务系统

在当今的数字化浪潮中&#xff0c;构建高效、灵活且可扩展的系统已成为企业的重要目标。微服务架构作为一种先进的软件设计模式&#xff0c;通过将复杂的应用程序分解为一系列小型、独立的服务&#xff0c;显著提升了系统的灵活性、可扩展性和维护性。本文将通过解析微服务系统…

【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构

Android Studio 版本 Android Java MVP 模式 参考 模型层 model public class User {private String email;private String password;public User(String email, String password) {this.email = email;this.password = password;}public String getEmail() {return email;}…

【海思Hi3519DV500】双目网络相机套板硬件规划方案

Hi3519DV500双目网络相机套板是针对该芯片设计的一款 IP 编码板 PCBA&#xff0c;硬件接口支持双目sensor 接入&#xff0c;SDIO3.0 接口、USB2.0、USB3.0、UART 接口以及丰富的 IO 扩展应用&#xff0c;可根据各种使用场景设计相应扩展板&#xff0c;丰富外围接口&#xff0c;…

百度世界2024:智能体引领AI应用新纪元

在近日盛大举行的百度世界2024大会上&#xff0c;百度创始人李彦宏以一场题为“文心一言”的精彩演讲&#xff0c;再次将全球科技界的目光聚焦于人工智能&#xff08;AI&#xff09;的无限可能。作为一名科技自媒体&#xff0c;我深感这场演讲不仅是对百度AI技术实力的一次全面…

SPP:空间金字塔池化

今天水一篇博客&#xff0c;讲讲SPP池化结构&#xff1b;那这是个什么东西呢&#xff1f;它的作用又是什么呢&#xff1f;在了解它之前我们先简单了解一下大部分的神经网络&#xff1b; 引入&#xff1a; 在大部分的神经网络中&#xff0c;都将神经网络分为Backbone主干网络、…

Ubuntu Linux使用前准备动作_使用root登录图形化界面

Ubuntu默认是不允许使用 root 登录图形化界面的。这是出于安全考虑的设置。但如果有需要&#xff0c;可以通过以下步骤来实现使用 root 登录&#xff1a; 1、设置 root 密码 打开终端&#xff0c;使用当前的管理员账户登录系统。在终端中输入命令sudo passwd root&#xff0c…

ubuntu下连接了192.168.1.x和192.168.2.x两个网络段,如何让这个两个网段互相通信?

在 Ubuntu 上连接两个网络段&#xff08;如 个人终端A 192.168.1.10 和 个人终端B 192.168.2.10&#xff09;&#xff0c;需要配置路由和网络转发功能&#xff0c;使这两个网段能够相互通信。以下是实现方法&#xff1a; 步骤 1&#xff1a;确认网络配置 1. 确保 Ubuntu 机器…

React Native Mac 环境搭建

下载 Mac 版Android Studio 下载 安装 JDK 环境 Flutter 项目实战-环境变量配置一 安装 Node.js 方式一 通过Node.js 官网下载 下载完成后点击安装包进行安装 安装完成

第75期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

vue2-基础核心

vue简介 动态构建用户界面的渐进式 JavaScript 框架 vue的特点: 遵循MVVM模式 采用组件化模式&#xff0c;提高代码复用率&#xff0c;让代码更好维护 声明式编码&#xff0c;无需直接操作DOM&#xff0c;提高开发效率&#xff0c;编码简洁、体积小&#xff0c;运行效率高 本…

移动应用开发:使用Android Studio 实现登录页与注册页跳转

文章目录 前期一&#xff0c;添加UI控件触发跳转二&#xff0c;编写LoginActivity活动代码三&#xff0c;运行程序查看效果 前期 需创建两个活动页面&#xff0c;登录页和注册页&#xff0c;可参考&#xff1a;《Android Studio实现简易登录页》《Android Studio实现简易注册页…

C++小白实习日记——Day 5 gitee怎么删文件,测试文件怎么写循环

昨晚一直内耗&#xff0c;一个程序写了三天写不出来&#xff0c;主要是耗时太多了&#xff0c;老板一直不满意。想在VScode上跑一下&#xff0c;昨晚一直报错。今天来公司重新搞了一下&#xff0c; 主要工作有&#xff1a; 1&#xff0c;读取当前时间用tscns 2&#xff0c;输…

ssm143校园一卡通系统软件的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;校园一卡通系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园一卡通系统就是…

[Go]-sync.map使用详解

sync.Map是 Go 语言中在并发环境下使用的安全映射类型。 一、为什么需要sync.Map 在 Go 语言中&#xff0c;普通的map不是并发安全的。当多个 goroutine 同时读写一个普通map时&#xff0c;可能会导致程序出现未定义的行为&#xff0c;比如数据竞争、程序崩溃等。而sync.Map则…

迁移学习理论与应用

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习技术&#xff0c;旨在将一个任务&#xff08;源任务&#xff09;上学到的知识迁移到另一个相关但不完全相同的任务&#xff08;目标任务&#xff09;上&#xff0c;从而提高目标任务的学习效果。这种方法的核心…

孙玲:从流水线工人到谷歌程序员

这是《开发者说》的第24期&#xff0c;本期我们邀请的开发者是孙玲&#xff0c;她出生于湖南娄底一个贫穷的农村家庭&#xff0c;2009年高考落榜&#xff0c;她去了深圳一家电子厂&#xff0c;在流水线上给电池喷码&#xff0c;每天12个小时轮班&#xff0c;月薪2300&#xff0…

深度解析FastDFS:构建高效分布式文件存储的实战指南(上)

文章目录 一、FastDFS简介1.1 概述1.2 特性 二、FastDFS原理架构2.1 FastDFS角色2.2 存储策略2.3 上传过程2.4 文件同步2.5 下载过程 三、FastDFS适用场景四、同类中间件对比4.1 FastDFS和集中存储方式对比4.2 FastDFS与其他文件系统的对比 五、FastDFS部署5.1 单机部署5.1.1 使…

Argo workflow 拉取git 并使用pvc共享文件

文章目录 拉取 Git 仓库并读取文件使用 Kubernetes Persistent Volumes&#xff08;通过 volumeClaimTemplates&#xff09;以及任务之间如何共享数据 拉取 Git 仓库并读取文件 在 Argo Workflows 中&#xff0c;如果你想要一个任务拉取 Git 仓库中的文件&#xff0c;另一个任…