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  缺省参数

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

        缺省值不是默认值!

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

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

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

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

// 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;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Faulhaber 2.5代运动控制系统 25mNm/13W

2.5代控制系统&#xff1b; PWM输出&#xff1b; 四象限控制带&#xff1b; RS232或CANopen通信接口&#xff1b; 2250_BX4_CxD 选件&#xff0c;电缆和连接信息&#xff1a; 适配部件&#xff1a;

谷歌的开源供应链安全

本内容是对Go项目负责人Russ Cox 在 ACM SCORED 活动上演讲内容[1]的摘录与整理。 SCORED 是Software Supply Chain Offensive Research and Ecosystem Defenses的简称, SCORED 23[2]于2023年11月30日在丹麦哥本哈根及远程参会形式举行。 摘要 &#x1f4a1; 谷歌在开源软件供应…

根据数据配置信息运用非集成函数处理数据

根据数据配置信息 &#xff08;data configure&#xff09;运用非集成函数nonensembled_map_fns处理蛋白质tensor dict。nonensembled_map_fns处理函数&#xff1a; correct_msa_restypes&#xff0c;add_distillation_flag&#xff0c;cast_64bit_ints&#xff0c;squeeze_fea…

【面经】2024年软件测试面试题大全(持续更新)附答案

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

冒泡排序学习

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它通过重复地交换相邻的元素来排序。具体实现如下&#xff1a; 1. 从待排序的数组中的第一个元素开始&#xff0c;依次比较相邻的两个元素。 2. 如果前一个元素大于后一个元素&#xff0c;则交换…

计算机网络英文总结

物理层 数据链路层 循环冗余校验(Cyclic Redundancy Check) 点对点协议PPP(Point-to-Point Protocol) 链路控制协议(Link Control Protocol) 网络控制协议(Network Control Protocol) 网络层(network layer) IP(Internet Protocol) 网际协议 ARP(Address…

Mysql in FIND_IN_SET(‘123‘, 数据库字段) 的使用场景

-- in后面的参数是我传入的List SELECT * from user where 数据库字段 in(123, 456); -- 第一个参数是常量, 第二个参数是 数据库字段(逗号隔开的字符串) SELECT * from user where FIND_IN_SET(123, 数据库字段); 用find_in_set 和 like, SELECT * FROM user WHERE…

YOLOv8使用自定义改进后的模型同时《加载官方预训练权重》教程,附代码

YOLOv8自定义改进后的模型同时《加载官方预训练权重》教程,附代码 💡该教程为改进YOLOv8指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可💡更方便的统计更多实验数据,方便写作 YOLOv8自定义…

docker部署node服务pm2

mkdir /data cd /data拉取最新keymetrics/pm2:latest-alpine镜像 docker pull keymetrics/pm2  从github上拉取代码&#xff0c;先要安装git git clone https://github.com/keymetrics/pm2-docker-alpinecd /data/pm2-docker-alpine/example-app编写Dockerfile&#xff0c;…

Spring boot basePackages 通配符* 找不到Bean

Spring boot basePackages 通配符* 找不到Bean 今天遇到了一个关于spring boot 组件ComponentScan 中basePackages 使用通配符* 找不到Bean的问题 目录结构中BussinessPerson与Dog类中都有标注有Component注解&#xff0c;结果扫描不到。 然后删除通配符&#xff0c;结果运行成…

01 Vue介绍

概述 Developers in the industry must resolve frontend development problems quickly with minimal impact on existing workflows or backend architecture. In any cases, developers tend to overlook the UI until the end of a project, which can happen because of …

C++相关闲碎记录(15)

1、string字符串 #include <iostream> #include <string> using namespace std;int main (int argc, char** argv) {const string delims(" \t,.;");string line;// for every line read successfullywhile (getline(cin,line)) {string::size_type beg…

ADUM1200ARZ数字隔离器:重新定义技术标准

ADUM1200ARZ数字隔离器成为技术进步领域的关键组件。其创新设计和多方面功能重新定义了数字隔离技术的格局&#xff0c;提供了满足不同工业需求的众多功能。让我们通过本文直观的了解ADUM1200ARZ的功能与技术标准。 窄体且符合ROHS&#xff1a;设定新基准 该数字隔离器采用窄体…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

目录 一、实验 1.蓝绿发布准备 2.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布 二、问题 1.手动构建Jenkins前端项目CI流水线报错 2.如何优化手动构建流水线选项参数 一、实验 1.蓝绿发布准备 &#xff08;1&#xff09;环境 表1 蓝绿发布…

该不该实行末位淘汰制?

在绩效考核中&#xff0c;不得不提一种特别的制度&#xff1a;末位淘汰制。具体而言&#xff0c;末位淘汰制是指工作单位根据设定的目标&#xff0c;结合各个岗位的实际情况&#xff0c;设定的考核指标体系&#xff0c;并以此指标体系为标准对员工进行考核&#xff0c;最后根据…

用EnumSet代替位域

在Java中&#xff0c;可以使用EnumSet来代替位域&#xff0c;以提高代码的可读性和类型安全性。下面是一个简单的例子&#xff0c;演示如何使用EnumSet来管理一组枚举值&#xff1a; import java.util.EnumSet;// 定义一个枚举类型表示权限 enum Permission {READ, WRITE, EXE…

Ubuntu NAT模式下自己电脑无法用过Xshell等工具远程

背景 下载的Ubuntu18.04桌面版&#xff0c;默认配置成NAT模式后&#xff0c;电脑主机可以正常ping通VM&#xff0c;但是Xshell无法远程连接 做法&#xff08;怕不可逆可以先快照&#xff09; 1&#xff1a;查看/etc/ssh/sshd_config配置是否开启22端口 开启后重启ssh 2&#x…

NCNN 源码学习【三】:数据处理

一、Topic&#xff1a;数据处理 这次我们来一段NCNN应用代码中&#xff0c;除了推理外最重要的一部分代码&#xff0c;数据处理&#xff1a; ncnn::Mat in ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols, bgr.rows, 227, 227);const float mean_v…

独孤思维:真正赚钱的人只会关注自己的事业

真正赚钱的人只会关注自己的事业。 因为对他们来说&#xff0c;事业才是稀缺奢侈品。 这份事业可以是你的工作&#xff0c;可以是你的副业&#xff0c;也可以是你的创业。 真正赚钱的人不会去绞劲脑汁去想如何炫耀&#xff0c;如何吹牛b。 但凡赚了点钱&#xff0c;就开始炫…

DDOS 攻击是什么?有哪些常见的DDOS攻击?

DDOS简介 DDOS又称为分布式拒绝服务&#xff0c;全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载&#xff0c;导致服务不可用&#xff0c;从而造成服务器拒绝正常流量服务。就如酒店里的房间是有固定的数量的&#xff0c;比如一个酒店有50个房间&am…