当前位置: 首页 > news >正文

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. 任何基本类型的数据,都可以隐式转换为布尔类型,那复合类型的数据,如何转换为布尔类型?

相关文章:

1、命名空间、C++的复合类型、缺省参数

命名空间 1、命名空间的定义 使用namespace定义&#xff0c;使用作用域限定符::访问 #include <iostream> namespace ICBC{int money 0;void save( int m){money m;} } int main( void ){ICBC::save( 100); std::cout << "工行卡余额&#xff1a;"…...

colab notebook导出为PDF

目录 方法一&#xff1a;使用浏览器打印功能 方法二&#xff1a;使用nbconvert转换 方法三&#xff1a;在线转换 方法一&#xff1a;使用浏览器打印功能 一般快捷键是CTRLP 然后改变目标打印机为另存为PDF 这样就可以将notebook保存为PDF了 方法二&#xff1a;使用nbconver…...

【Python动漫系列】名侦探柯南(完整代码)

文章目录 名侦探柯南环境需求完整代码程序分析系列文章名侦探柯南 《名侦探柯南》是由青山刚昌创作的一部侦探漫画,于1994年开始连载,并被改编为动画、电影、游戏等多种形式。故事讲述了高中生侦探工藤新一在破案时被不良组织所毒害,身体缩小成了一个小学生,为了寻找解药并…...

【matlab】QR分解

QR分解 给定一个mn的矩阵A&#xff0c;其中m≥n&#xff0c;即矩阵A是高矩阵或者是方阵&#xff0c;QR分解将矩阵A分解为两个矩阵Q和R的乘积&#xff0c;其中矩阵Q是一个mn的各列正交的矩阵&#xff0c;即QTQI&#xff0c;矩阵R是一个nn的上三角矩阵&#xff0c;其对角线元素为…...

Liunx系统使用超详细(三)

本篇内容开始逐渐描述有关liunx的各种命令的使用方法&#xff01; 目录 一、目录和文件区别 1.1目录&#xff1a; 1.2文件&#xff1a; 1.3总结&#xff1a; 二、Linux命令的写法 三、linux命令清屏 四、pwd命令 五、ls命令 5.1 ls&#xff1a; 5.2 ls -l&#xff1a…...

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年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…...

Maven项目目录结构

项目结构 目录说明.ideaIDEA工具的配置文件.mvn用于运行Maven项目src源码文件夹target字节码文件夹.gitignore配置git忽略文件HELP.md自述文件mvnw运行Maven命令&#xff08;Linux&#xff09;mvnw.cmd运行Maven命令&#xff08;Windows&#xff09;pom.xml依赖管理文件 如图…...

感慨!一路从测试小白到现在的高级测试工程师,方向不对真的很艰辛

1 功能测试人员&#xff0c;也就是我们常常俗称的进行点点点测试工程师。前 1-2 年做功能测试&#xff0c;使用其他人开发的工具进行测试。这个阶段的测试工作都比较初级&#xff0c;严重依赖于别人开发的工具和系统。当系统进行升级换代的时候&#xff0c;强哥会明显的感觉到…...

字符串经典基础面试题

关卡名 字符串经典基础面试题 我会了✔️ 内容 1.理解字符串反转的处理方法 ✔️ 2.熟练掌握回文串的判断方法 ✔️ 3.掌握字符串中搜索第一个唯一字符的方法 ✔️ 4.掌握判断是否互为字符串重排的处理技巧 ✔️ 1 反转的问题 我们知道反转是链表的一个重要考点&#xf…...

【华为OD题库-062】计算礼品发放的最小分组数目-java

题目 又到了一年的末尾&#xff0c;项目组让小明负责新年晚会的小礼品发放工作。为使得参加晚会的同时所获得的小礼品价值相对平衡&#xff0c;需要把小礼品根据价格进行分组&#xff0c;但每组最多只能包括两件小礼品&#xff0c;并且每个分组的价格总和不能超过一个价格上限。…...

[go 面试] 构建高效微服务通信:选择合适的通信方式

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 构建分布式系统或微服务架构时&#xff0c;服务间通信成为至关重要的一环。不同的通信方式各有优劣&#xff0c;因此在选择时需根…...

【华为OD题库-048】拔河比赛-java

题目 公司最近准备进行拔河比赛&#xff0c;需要在全部员工中进行挑选。选拔的规则如下: 1.按照身高优先、体重次优先的方式准备比赛阵容 2.规定参赛的队伍派出10名选手 请实现一个选拔队员的小程序。 输入为一个数组&#xff0c;记录了部门人员的身高、体重信息&#xff0c;如…...

【WebSocket】通信协议基于 node 的简单实践和心跳机制和断线重连的实现

前后端 WebSocket 连接 阮一峰大佬 WebSocket 技术博客 H5 中提供的 WebSocket 协议是基于 TCP 的全双工传输协议。它属于应用层协议&#xff0c;并复用 HTTP 的握手通道。它只需要一次握手就可以创建持久性的连接。 那么什么是全双工呢&#xff1f; 全双工是计算机网络中的…...

【有ISSN、ISBN号!往届均已完成EI检索】第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024)

第三届电子信息工程、大数据与计算机技术国际学术会议&#xff08;EIBDCT 2024&#xff09; 2024 3rd International Conference on Electronic Information Engineering, Big Data and Computer Technology 第三届电子信息工程、大数据与计算机技术国际学术会议&#xff08;…...

【Windows】使用SeaFile搭建本地私有云盘并结合内网穿透实现远程访问

1. 前言 现在我们身边的只能设备越来越多&#xff0c;各种智能手机、平板、智能手表和数码相机充斥身边&#xff0c;需要存储的数据也越来越大&#xff0c;一张手机拍摄的照片都可能有十多M&#xff0c;电影和视频更是按G计算。而智能设备的存储空间也用的捉襟见肘。能存储大量…...

Windows本地搭建WebDAV服务并使用内网穿透远程访问【无公网IP】

windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网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 开发技术&#xff1a;后端 ssm 后台管理 vue 用户端 vue.jshtml 演示视频&#xff1a; 基于ssm品牌会员在线商城源码 DROP TABLE IF EXISTS address; /*!40101 SET saved_cs_client character_set_client */; /…...

骨传导耳机音量大了有害吗?骨传导能保护听力吗?

无论是传统耳机还是骨传导耳机&#xff0c;只要使用音量过大&#xff0c;都会对有一定的损伤&#xff0c;然而由于骨传导耳机的传声原理和佩戴方式比较特殊&#xff0c;所以对人体的损伤比较小&#xff0c;想要知道骨传导耳机能否保护听力&#xff0c;就要先了解骨传导耳机的传…...

百望云供应链协同解决方案入选北大创新评论产业研究案例库

11月28日-29日&#xff0c;百望云受邀出席《北大创新评论》2023 Inno China 中国产业创新大会&#xff0c;从战略构建、生态塑造、科技创新等议题出发&#xff0c;与学术专家、产业专家、企业代表共赴盛会&#xff0c;思享汇聚。会上&#xff0c;《北大创新评论产业研究案例库&…...

selenium中元素定位正确但是操作失败,6种解决办法全搞定

selenium中元素定位正确但是操作失败的原因无外乎以下4种&#xff1a; 01 页面没加载好 解决方法&#xff1a;添加等待方法&#xff0c;如&#xff1a;time.sleep() 02 页面提交需要等待给数据后台 解决方法&#xff1a;添加等待方法&#xff0c;如&#xff1a;time.sleep(…...

触控板绘画工具Inklet mac功能介绍

Inklet mac是一款触控板绘画工具&#xff0c;把你的触控板变成画画的板子&#xff0c;意思是&#xff0c;你点在触控板的哪里&#xff0c;鼠标就会出现载相应的地方。例如&#xff0c;但你把手指移动到触控盘左下角&#xff0c;那么鼠标也会出现在左下角&#xff0c;对于用户而…...

〔005〕虚幻 UE5 像素流多用户部署

✨ 目录 ▷ 为什么要部署多用户▷ 开启分发服务器▷ 配置启动多个信令服务器▷ 配置启动客户端▷ 多用户启动整体流程和预览▷ 注意事项 ▷ 为什么要部署多用户 之前的像素流部署&#xff0c;属于单用户&#xff0c;是有很大的弊端的打开多个窗口访问&#xff0c;可以看到当一…...

11. 哈希冲突

上一节提到&#xff0c;通常情况下哈希函数的输入空间远大于输出空间&#xff0c;因此理论上哈希冲突是不可避免的。比如&#xff0c;输入空间为全体整数&#xff0c;输出空间为数组容量大小&#xff0c;则必然有多个整数映射至同一桶索引。 哈希冲突会导致查询结果错误&#…...

12.04 二叉树中等题

513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路&#xff1a;找到最低层中最左侧的节点值&#xff0c;比较适合层序遍历&#xff0c;返回最…...

Redis的安装

本文采用原生的方式安装Redis&#xff0c;Redis的版本为5.0.5 安装 下载 下载网站&#xff1a;https://download.redis.io/releases/ wget http://download.redis.io/releases/redis-5.0.5.tar.gz解压 tar -zxvf redis-5.0.5.tar.gz进入redis目录 cd redis-5.0.5执行编译…...

JDK安装太麻烦?一篇文章搞定

JDK是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心&#xff0c;它包含了JAVA的运行环境&#xff08;JVMJava系统类库&#xff09;和JAVA工具。 JDK包含的基本组件包括&#xff1a; javac – 编译器&#xf…...

漫谈HBuilderX App-Jenkins热更新构建

漫谈Uniapp App热更新包-Jenkins CI/CD打包工具链的搭建 零、写在前面 HBuilderX是DCloud旗下的IDE产品&#xff0c;目前只提供了Windows和Mac版本使用。本项目组在开发阶段经常需要向测试环境提交热更新包&#xff0c;使用Jenkins进行CD是非常有必要的一步。尽管HBuilderX提…...

网站建设用什么软件/抖音优化公司

文章目录1.包装类自动装箱拆箱基本类型与字符串类型的转换包装类的比较与数值类型的值进行比较包装类与包装类的比较通过自动装箱比较compare比较包装类2.处理对象打印对象和toString方法和equals&#xff08;&#xff09;方法用法对比“hello”和new String("hello"…...

网站开发文件夹/合肥网络推广服务

计算机应用基础第一章笔记1.计算机工具的变迁2.计算机的发展过程3.冯.诺依曼计算机的工作原理4.计算机系统的硬件和软件组成5.计算机的性能指标6.影响计算机的性能因素7.数据在计算机中表示和存储方式8.数制之间的转换冯.诺依曼体系的结构计算机软件的类别计算机的性能指标二进…...

网站建设_seo技术支持/网络运营好学吗

接前面。 回到程序调用关系上来&#xff1a; estimate_rel_size -> RelationGetNumberOfBlocks->RelationGetNumberOfBlocksINFork ->Smgrnblocks->mdnblocks... 折腾了一圈&#xff0c;就是为了评估一个表的大小。 那么&#xff0c;我们所获得的block&#xff0c;…...

潍坊网站建设兼职/上海好的seo公司

java 并发与线程池 java并发包使用Executor框架来进行线程的管理&#xff0c;Executor将任务的提交与执行过程分开&#xff0c;直接使用Runnable表示任务。future获取返回值。ExecutorService 继承了Executor接口&#xff0c;提供生命周器的管理&#xff0c;包括运行&#xff0…...

网页制作正版网站/海南百度首页广告

rpm与deb都是什么呢 有什么区别呢 https://blog.csdn.net/frank0712105003/article/details/8125662...

专业的seo网站优化公司/江苏seo网络

【单选题】以下程序的输出结果是:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ def hub(ss, x 2.0,y 4.0): ss x * y ss 10 print(ss, hub(ss, 3…...