1、命名空间、C++的复合类型、缺省参数
命名空间
1、命名空间的定义
使用namespace定义,使用作用域限定符::访问
#include <iostream>
namespace ICBC{int money = 0;void save( int m){money += m;}
}
int main( void ){ICBC::save( 100); std::cout << "工行卡余额:" << ICBC::money << std::endl;return 0;
}
2、声明定义分开
#include <iostream>namespace BOC{int money = 0;void save( int m){ // 声明同时定义money += m;}void pay( int m); // 声明
}
void BOC::pay( int m){ // 定义money -= m;
}int main( void ){BOC::save( 100);BOC::pay( 50);std::cout << "中国银行余额:" << BOC::money << std::endl;return 0;
}
3、命名空间的自动合并
多个文件或位置的相同namespace会被编译器自动合并。
#include <iostream>namespace ICBC{int money = 0;void save( int m){money += m;}
}namespace BOC{int money = 0;void save( int m){ // 声明同时定义money += m;}void pay( int m); // 声明
}namespace ICBC{void pay( int m){money -= m;}
}void BOC::pay( int m){ // 定义money -= m;
}int main( void ){ICBC::save( 100); ICBC::pay( 50);std::cout << "工行余额:" << ICBC::money << std::endl;BOC::save( 1000);BOC::pay( 500);std::cout << "中国银行余额:" << BOC::money << std::endl;return 0;
}
3、命名空间指令
C++中有 定义表和可见表。
using namespace std为名字空间指令,表示从这行代码开始,std中的内容在当前作用域可见,在可见表
// 命名空间指令
#include <iostream>
using namespace std;
namespace ns{int g_value = 0;
}//int g_value = 0;
//using namespace ns; // 命名空间指令:从这行代码开始,ns中的内容在当前作用域可见int main( void ){
// int g_value = 0;using namespace ns; // 命名空间指令:从这行代码开始,ns中的内容在当前作用域可见g_value = 666; // /*std::*/cout << "ns::g_value = " << ns::g_value << /*std::*/endl;return 0;
}
4、命名空间声明
命名空间声明会让其出现在定义表中
// 命名空间声明
#include <iostream>
using namespace std;namespace ns{int g_value = 0;
}//int g_value = 0;
//using ns::g_value; // 从这行代码开始,ns中的g_value引入当前作用域(相当于定义)int main( void ){
// int g_value = 0;using ns::g_value; // 从这行代码开始,ns中的g_value引入当前作用域(相当于定义)g_value = 666; // cout << "ns::g_value = " << ns::g_value << endl;return 0;
}
5、命名空间嵌套和别名
命名空间嵌套
- 内层标识符与外层同名标识符为隐藏关系
- 嵌套的命名空间需要逐层分解
命名空间别名
- 可通过命名空间别名简化书写
namespace ns four = ns1::ns2::ns3::ns4;
#include <iostream>
using namespace std;namespace ns1{int g_value = 100;namespace ns2{int g_value = 200;namespace ns3{int g_value = 300;namespace ns4{int g_value = 400;}}}
}int main( void ){namespace ns_four = ns1::ns2::ns3::ns4; // 别名cout << ns_four::g_value << endl;return 0;
}
C++的复合类型
- C++的结构体
- 结构体内部可以定义成员函数
- 在成员函数的内部可以直接访问本结构体的成员,无需通过
.或->
- C++的联合
- 支持匿名联合
- C++的枚举
- 独立的类型,和整型数据之间不能隐式转换
- 表示布尔量的数据类型
- bool
- 布尔类型的字面值常量
- true 表示真
- false 表示假
- 布尔类型的本质
- 单字节整数,用1和0表示真和假
- 任何基本类型的数据都可以被隐式转换为布尔类型
- 非0即真,0即假
// C++的复合类型#include <iostream>
#include <cstring>
using namespace std;void TestStruct(){struct Student{int m_age; // 成员变量char m_name[256]; // 成员变量 void getInfo(){ // 成员函数cout << "getInfo(): 姓名:" << m_name << ", 年龄:" << m_age << endl;}};/*struct*/ Student s;s.m_age = 22;strcpy(s.m_name,"张三");cout << "姓名:" << s.m_name << ", 年龄:" << s.m_age << endl;s.getInfo();
}
void TestUnion(){union{ // 匿名联合,主要想体现所有的成员共用同一块内存空间int i;char c[4];};i = 0x12345678; // 小端字节序 cout << hex << (int)c[0] << ' ' << (int)c[1] << ' ' << (int)c[2] << ' ' << (int)c[3] << endl;
}
void TestEnum(){enum Color{red, green, blue};/*enum*/ Color c = red; // 0;errorstd::cout << c << std::endl;
}
void TestBool(){bool a = "Hello"; // 0.0000001; // 123; // true;bool b = NULL; // 0.0000000; // 0; // false;cout << "a=" << a << ", b=" << b << endl;
}
int main(void){
// TestStruct();
// TestUnion();
// TestEnum();TestBool();return 0;
}
缺省/默认参数
- 可以为函数的形参指定缺省 (默认) 值,这种参数称之为缺省参数
- 当调用该函数时若未指定实参,则使用形参的缺省(默认)值
- 如果函数的某一个形参具有缺省值,那么该形参后面的所有形参必须都具有缺省值
- 尽量避免因为使用缺省参数而导致重载匹配歧义
- 函数形参的缺省值只能在函数声明中指定
- 注意:默认值不是初始值
// 函数的缺省参数: 带默认值的形参 (默认值不是初始值)#include <iostream>
using namespace std;void foo(int a, float b = 3.14, double c = 5.67, short d = 10, char e = 'A'); // 声明void foo(int a, float b, double c, short d, char e){ // 定义cout << "e: " << e << endl;
}void foo(int i){
}int main(void){foo(12, 3.45, 6.78, 34); // 没有给第五个参数提供实参,所以使用缺省值foo(12, 3.45, 6.78, 34, 'B'); // 给第五个参数提供了实参,使用实参// foo(12); // 因为使用缺省参数,导致重载匹配歧义(不知道选择哪一个)return 0;
}
问题
- 任何基本类型的数据,都可以隐式转换为布尔类型,那复合类型的数据,如何转换为布尔类型?
相关文章:
1、命名空间、C++的复合类型、缺省参数
命名空间 1、命名空间的定义 使用namespace定义,使用作用域限定符::访问 #include <iostream> namespace ICBC{int money 0;void save( int m){money m;} } int main( void ){ICBC::save( 100); std::cout << "工行卡余额:"…...
colab notebook导出为PDF
目录 方法一:使用浏览器打印功能 方法二:使用nbconvert转换 方法三:在线转换 方法一:使用浏览器打印功能 一般快捷键是CTRLP 然后改变目标打印机为另存为PDF 这样就可以将notebook保存为PDF了 方法二:使用nbconver…...
【Python动漫系列】名侦探柯南(完整代码)
文章目录 名侦探柯南环境需求完整代码程序分析系列文章名侦探柯南 《名侦探柯南》是由青山刚昌创作的一部侦探漫画,于1994年开始连载,并被改编为动画、电影、游戏等多种形式。故事讲述了高中生侦探工藤新一在破案时被不良组织所毒害,身体缩小成了一个小学生,为了寻找解药并…...
【matlab】QR分解
QR分解 给定一个mn的矩阵A,其中m≥n,即矩阵A是高矩阵或者是方阵,QR分解将矩阵A分解为两个矩阵Q和R的乘积,其中矩阵Q是一个mn的各列正交的矩阵,即QTQI,矩阵R是一个nn的上三角矩阵,其对角线元素为…...
Liunx系统使用超详细(三)
本篇内容开始逐渐描述有关liunx的各种命令的使用方法! 目录 一、目录和文件区别 1.1目录: 1.2文件: 1.3总结: 二、Linux命令的写法 三、linux命令清屏 四、pwd命令 五、ls命令 5.1 ls: 5.2 ls -l:…...
Kubernetes学习笔记-Part.06 Docker安装
目录 Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退 第六章 Docker安装 在master、worker、harbor上均需…...
现在的00后,实在是太卷了......
现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条…...
Maven项目目录结构
项目结构 目录说明.ideaIDEA工具的配置文件.mvn用于运行Maven项目src源码文件夹target字节码文件夹.gitignore配置git忽略文件HELP.md自述文件mvnw运行Maven命令(Linux)mvnw.cmd运行Maven命令(Windows)pom.xml依赖管理文件 如图…...
感慨!一路从测试小白到现在的高级测试工程师,方向不对真的很艰辛
1 功能测试人员,也就是我们常常俗称的进行点点点测试工程师。前 1-2 年做功能测试,使用其他人开发的工具进行测试。这个阶段的测试工作都比较初级,严重依赖于别人开发的工具和系统。当系统进行升级换代的时候,强哥会明显的感觉到…...
字符串经典基础面试题
关卡名 字符串经典基础面试题 我会了✔️ 内容 1.理解字符串反转的处理方法 ✔️ 2.熟练掌握回文串的判断方法 ✔️ 3.掌握字符串中搜索第一个唯一字符的方法 ✔️ 4.掌握判断是否互为字符串重排的处理技巧 ✔️ 1 反转的问题 我们知道反转是链表的一个重要考点…...
【华为OD题库-062】计算礼品发放的最小分组数目-java
题目 又到了一年的末尾,项目组让小明负责新年晚会的小礼品发放工作。为使得参加晚会的同时所获得的小礼品价值相对平衡,需要把小礼品根据价格进行分组,但每组最多只能包括两件小礼品,并且每个分组的价格总和不能超过一个价格上限。…...
[go 面试] 构建高效微服务通信:选择合适的通信方式
关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 构建分布式系统或微服务架构时,服务间通信成为至关重要的一环。不同的通信方式各有优劣,因此在选择时需根…...
【华为OD题库-048】拔河比赛-java
题目 公司最近准备进行拔河比赛,需要在全部员工中进行挑选。选拔的规则如下: 1.按照身高优先、体重次优先的方式准备比赛阵容 2.规定参赛的队伍派出10名选手 请实现一个选拔队员的小程序。 输入为一个数组,记录了部门人员的身高、体重信息,如…...
【WebSocket】通信协议基于 node 的简单实践和心跳机制和断线重连的实现
前后端 WebSocket 连接 阮一峰大佬 WebSocket 技术博客 H5 中提供的 WebSocket 协议是基于 TCP 的全双工传输协议。它属于应用层协议,并复用 HTTP 的握手通道。它只需要一次握手就可以创建持久性的连接。 那么什么是全双工呢? 全双工是计算机网络中的…...
【有ISSN、ISBN号!往届均已完成EI检索】第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024)
第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024) 2024 3rd International Conference on Electronic Information Engineering, Big Data and Computer Technology 第三届电子信息工程、大数据与计算机技术国际学术会议(…...
【Windows】使用SeaFile搭建本地私有云盘并结合内网穿透实现远程访问
1. 前言 现在我们身边的只能设备越来越多,各种智能手机、平板、智能手表和数码相机充斥身边,需要存储的数据也越来越大,一张手机拍摄的照片都可能有十多M,电影和视频更是按G计算。而智能设备的存储空间也用的捉襟见肘。能存储大量…...
Windows本地搭建WebDAV服务并使用内网穿透远程访问【无公网IP】
windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…...
责任链设计模式
package com.jmj.pattern.responsibility;/*** 请假条类*/ public class LeaveRequest {//姓名private String name;//请假天数private int num;//请假内容private String content;public LeaveRequest(String name, int num, String content) {this.name name;this.num num;…...
12.4 C++ 作业
完成沙发床的多继承 #include <iostream>using namespace std;//封装 沙发 类 class Sofa { private:string *sitting; public://无参构造函数Sofa(){cout << "Sofa::无参构造函数" << endl;}//有参构造函数Sofa(string s):sitting(new string(s)…...
基于ssm品牌会员在线商城源码
基于ssm品牌会员在线商城源码708 idea mysql数据库 navcat 开发技术:后端 ssm 后台管理 vue 用户端 vue.jshtml 演示视频: 基于ssm品牌会员在线商城源码 DROP TABLE IF EXISTS address; /*!40101 SET saved_cs_client character_set_client */; /…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
