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

c++_01_名字空间_复合类型_缺省参数_哑元函数

0  前言

        C++和C一样,都属于编译型语言

        C++和C一样,都属于强类型语言

        C++对C完全兼容,并提供更多面向对象的特性:语言风格更加简洁,类型检查更加严格

1  名字空间 namespace

        WHY?划分更精细的逻辑单元(逻辑空间),有效避免名字的冲突。

        WHAT?名字空间定义:namespace 名字空间名 {...} 

        名字空间合并 ,方便多人协作

        声明定义分开 ,声明在一个文件,定义在一个文件

// nameconf.cpp 名字空间:可以划分更多的逻辑单元(作用域),可以有效避免名字的冲突问题
#include <iostream>
namespace ICBC {int g_money = 0;void save( int money ) {g_money += money;}
}
namespace CCB {int g_money = 0;void save( int money ) { // 连 声明 带 定义g_money += money;}void pay( int money );// 声明
}void CCB::pay( int money ) { // 定义g_money -= money;
}namespace ICBC { // 编译器将合并为一个名字空间void pay( int money ) {g_money -= money;}
}
int main( void ) {ICBC::save( 10000 );ICBC::pay( 3000 );std::cout << "工行卡余额:" << ICBC::g_money << std::endl;CCB::save( 8000 );CCB::pay( 3000 );std::cout << "建行卡余额:" << CCB::g_money << std::endl;return 0;
}

         HOW? 怎样使用名字空间的成员?

        1)作用域限定符 :: 

        2)名字空间指令(可见)

        3)名字空间声明(相当于定义,但生命周期为进程级)

// diruse.cpp 名字空间指令
#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 = 100; /*std::*/cout << "ns::g_value=" << ns::g_value << /*std::*/endl;return 0;
}

// impname.cpp 名字空间声明
#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 = 100; cout << "ns::g_value=" << ns::g_value << endl;return 0;
}

        名字空间嵌套

                -内层标识符与外层标识符为隐藏关系(即内外层标识符名字可相同)

                -嵌套的名字空间需要逐层分解(用别名方便)

        名字空间别名

                -可通过名字空间别名,来简化书写:

                namespace  ns_four = ns1::ns2::ns3::ns4;

// netstalias.cpp 名字空间的嵌套
#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;
}

2  C++复合类型

2.1  C++的结构

        定义结构型的变量时,可以省略struct关键字

        在结构体内部可以定义成员函数 

        在成员函数的内部可以直接访问本结构体的成员,无需通过"."或"->"

2.2  C++的联合

        定义联合型的变量时,可以省略union关键字

        支持匿名联合

2.3  C++的枚举

        定义枚举型的变量时,可以省略enum关键字

        独立的类型,和整型数据之间不能隐式转换(输red,不能输0。虽然就是0,但类型不同)

// type.c  C++的复合类型,可以省略关键字#include <iostream>void TestStruct( ) {struct Student {int m_age;char m_name[256];};/*struct*/ Student s;
}void TestUnion( ) {union A {int i;char c[4];};/*union*/ A a;
}void TestEnum( ) {enum Color { red, green, blue };/*enum*/ Color c;
}
int main( void ) {return 0;
}
// type2.cpp C++的复合类型#include <iostream>
#include <cstring>
using namespace std;void TestStruct( ) {struct Student {int m_age; // 成员变量char m_name[256]; // 成员变量void getinfo( ) { // 成员函数cout << 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-errorcout << c << endl;
}void TestBool( ) {bool a = 'A'; // ""; // "fds"; // 0.000000001; // 123; // true;bool b = '\0'; // NULL;    // 0.000000000; // 0;   // false;cout << "a=" << a << ", b=" << b << endl;
}
int main( void ) {TestBool( );
//  TestEnum( );
//  TestUnion( );
//  TestStruct( );return 0;
}
//表示布尔量的数据类型:    bool
//布尔类型的字面值常量:    true false  分别表示真假
//布尔类型的本质:          1    0      单字节整数
//任何基本类型的数据都可被隐式转换为布尔类型:    非0为真,0为假

2.4  引用、指针、数组、字符串、string类...

3  缺省参数

        可以为函数的形参指定缺省(默认)值,这种参数称为缺省参数。

        缺省值不是默认值!

        当调用该函数时若未指定实参,则使用形参的缺省值。 

        如果函数的某个形参具有缺省值,那么该形参后面的所有形参都必须有缺省值。

        尽量避免因为使用缺省参数而导致重载匹配歧义

                void foo( int a,  float b = 2.3, double c = 4.5 ) {};

                void foo( int a ) {};  // 虽构成重载,但编译时会报匹配歧义ambiguous错

        函数形参的缺省值只能在函数声明中指定。

// defparam.cpp 缺省参数:带默认值的形参(默认值不是初始值)#include <iostream>
using namespace std;void foo( int a, double b, float c, short d, char e='A' ) {cout << "e=" << e << endl;
}int main( void ) {foo( 3, 3.14, 3.1, 2 );foo( 3, 3.14, 3.1, 2, 'B' );return 0;
}

4  哑元函数

        只指定形参类型而不指定形参名称的函数。

        用途:保证函数的向前兼容。(老用户继续带参,新用户随意带参)

// forover.cpp 哑元函数
#include <iostream>
using namespace std;
void foo( int ) {// 高精尖的人工智能算法,不需要用户传递数据,也可以得到正确的结果// 函数内部 不能获取 用户传递的实参数据
}int main( void ) {foo( 10 );return 0;
}

相关文章:

c++_01_名字空间_复合类型_缺省参数_哑元函数

0 前言 C和C一样&#xff0c;都属于编译型语言 C和C一样&#xff0c;都属于强类型语言 C对C完全兼容&#xff0c;并提供更多面向对象的特性&#xff1a;语言风格更加简洁&#xff0c;类型检查更加严格 1 名字空间 namespace WHY&#xff1f;划分更精细的逻辑单元(逻辑空间)&…...

前端常见面试题之html和css篇

文章目录 一、html1. 如何理解html语义化2. 说说块级元素和内联元素的区别 二、css1. 盒模型的宽度offsetWidth如何计算2. box-sizing:border-box有什么用3. margin的纵向重叠问题4. 谈谈你对BFC的理解和应用5. 清除浮动有哪些方式6. 使用flex布局实现骰子37.position的absolut…...

使用libaom处理av1编码教程

使用libaom处理av1编码教程 文章目录 使用libaom处理av1编码教程一. av1 是什么二. av1 用处三. libaom 是什么四. libaom 安装五. libaom 安装完成六. 解码av1 一. av1 是什么 AV1&#xff08;AOMedia Video 1&#xff09;是一种 开源视频编码格式 。它由开放媒体联盟 (AOM) …...

面试题总结(十)【数据库】【华清远见西安中心】

数据库的分类有哪些&#xff1f; 数据库可以按照不同的标准进行分类&#xff0c;以下是一些常见的数据库分类方式&#xff1a; 1. 关系型数据库&#xff08;Relational Database&#xff09;&#xff1a;关系型数据库采用表格的形式来组织数据&#xff0c;数据之间通过键值关联…...

计算机网络:物理层(三种数据交换方式)

今天又学到一个知识&#xff0c;加油&#xff01; 目录 前言 一、电路交换 二、报文交换 三、分组交换 1、数据报方式 2、虚电路方式 3、比较 总结 前言 为什么要进行数据交换&#xff1f; 一、电路交换 电路交换原理&#xff1a;在数据传输期间&#xff0c;源结点与…...

ubuntu18.04 64 位安装笔记——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

进入VirtuakBox官网&#xff0c;网址链接&#xff1a;Oracle VM VirtualBoxhttps://www.virtualbox.org/ 网页连接&#xff1a;Ubuntu Virtual Machine Images for VirtualBox and VMwarehttps://www.osboxes.org/ubuntu/ 将下发的ds_db01.sql数据库文件放置mysql中 12、编写S…...

Nvidia 驱动安装不完整记录

Nvidia 驱动安装不完整记录 安装 epel&#xff0c; sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-releaselatest-8.noarch.rpm安装 gcc-toolset-11-gcc&#xff0c; dnf install gcc-toolset-11-gcc修改 gcc&#xff0c;make&#xff0c;as 为 gcc-tools…...

龙芯loongarch64服务器编译安装gcc-8.3.0

前言 当前电脑的gcc版本为8.3.0,但是在编译其他依赖包的时候,出现各种奇怪的问题,会莫名其妙的中断编译。本地文章讲解如何自编译安装gcc,替换系统自带的gcc。 环境准备 下载页面:龙芯开源社区网站 - LoongArch GCC 8.3 交叉工具链 - 源码下载源码包名称如:loongson-gnu…...

宏基因组学Metagenome-磷循环Pcycle功能基因分析-从分析过程到代码及结果演示-超详细保姆级流程

大背景介绍 生信分析,凡事先看论文,有了论文就有了参考,后续分析就有底了,直接上硬菜开干: PCycDB: a comprehensive and accurate database for fast analysis of phosphorus cycling genes - PubMed 数据库及部分分析代码github库: GitHub - ZengJiaxiong/Phospho…...

element plus 日期范围 自定义内容

问题&#xff1a; 按照官网上的自定义内容示例&#xff0c;修改日期选择器没有问题&#xff0c;如果修改日期范围选择器&#xff0c;修改后会丢失日期范围选择时的样式。 解决&#xff1a; 从F12中不难看出日期范围的选择样式来自于.el-date-table-cell 而示例中写的是.cell&…...

[23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians

[paper | proj] 给定FLAME&#xff0c;基于每个三角面片中心初始化一个3D Gaussian&#xff08;3DGS&#xff09;&#xff1b;当FLAME mesh被驱动时&#xff0c;3DGS根据它的父亲三角面片&#xff0c;做平移、旋转和缩放变化&#xff1b;3DGS可以视作mesh上的辐射场&#xff1…...

JSON Ajax

1. JSON概念 JSON&#xff0c;全称JavaScript Object Notation&#xff0c;即JavaScript对象表示法&#xff0c;是一种轻量级的数据交换格式。它基于JavaScript的子集&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。 JSON的诞生&#xff0c;是为了解决电…...

ElasticSearch与HBase的分布式存储设计

本文内容覆盖如今两大非结构化数据库之间的区别 详情介绍 从各个角度详细对比 1. 官方定位 HBase 是 Hadoop 数据库,是一个分布式、可扩展的大数据存储。 当您需要对大数据进行随机、实时的读/写访问时,请使用 Apache HBase™。 这个项目的目标是在商用硬件集群上托管非常大…...

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 (多指标,多图)

回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现NGO-SCN北方苍鹰算法优化随机配置网络的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍…...

Bezier 曲线 2D

Bezier 曲线于 1962 年由法国雪铁龙汽车公司的工程师 Bezier 所发表&#xff0c;主要应用于汽车的外形设计。虽然 Bezier 曲线早在 1959 年便由法国雷诺汽车公司的 De Casteljau 运用递推算法开发成功&#xff0c;但是 Bezier 却给出了曲线的详细的曲线计算公式。所以&#xff…...

Linux静态ip

Linux静态ip Ⅰ、修改静态ip Ⅰ、修改静态ip 修改静态ip必须是root用户 su root //切换root用户 ip a //查看修改前的动态ipvi /etc/sysconfig/network-scripts/ifcfg-ens33 //打开网卡配置文件&#xff0c;修改一处&#xff0c;新增四处 BOOTPROTO&quo…...

一种基于外观-运动语义表示一致性的视频异常检测框架 论文阅读

A VIDEO ANOMALY DETECTION FRAMEWORK BASED ON APPEARANCE-MOTION SEMANTICS REPRESENTATION CONSISTENCY 论文阅读 ABSTRACT1. INTRODUCTION2. PROPOSED METHOD3. EXPERIMENTAL RESULTS4. CONCLUSION阅读总结&#xff1a; 论文标题&#xff1a;A VIDEO ANOMALY DETECTION FRA…...

Netty—NIO万字详解

文章目录 NIO基本介绍同步、异步、阻塞、非阻塞IO的分类NIO 和 BIO 的比较NIO 三大核心原理示意图NIO的多路复用说明 核心一&#xff1a;缓存区 (Buffer)Buffer类及其子类Buffer缓冲区的分类MappedByteBuffer类说明&#xff1a; 核心二&#xff1a;通道 (Channel)Channel类及其…...

面试经典150题(32-37)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第十五天&#xff09;完成了6道(32-37)150&#xff1a; 今天刚好有点没精神的感觉&#xff0c;然后碰到的题也不难。。天意&#xff01;&#xff01;&#xff01; 32.&#xff08;289. 生命游戏&#xff0…...

手撕分布式缓存---HTTP Client搭建

经过上个章节的学习&#xff0c;我们已经实现了一致性哈希算法&#xff0c;这个算法保证我们可以在节点发生变动时&#xff0c;最少的key请求受到影响&#xff0c;并返回这个节点的名称&#xff1b;这很大程度上避免了哈希雪崩和哈希穿透的问题。这个章节我们要基于此实现完整的…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...