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

使用转换函数重载布尔值类

1. 布尔值类的功能有哪些?

Boolean类具有以下的功能:

1.使用假为 False、真为 True 的枚举成员来表示,不具有其他的值。2. 在类的内部用 0 表示 False,用 1 表示 True。3. 可以与 int 型的值相互转换。在获取 int 型的值时,False 为 0,True 为 1;在赋予 int 型的值时,0 为 False,0 之外的值(即使不为 1)为 True。4.可以获取字符串 "False" 或 "True"。5. 可以使用插入符向输出流输出字符串 "False" 或 "True"。

2. 布尔值详解

#ifndef __Class_Boolean
#define __Class_Boolean
#include <iostream>//===== 布尔值类 =====//
class Boolean {
public:enum boolean { False, True }; // False 为假,True 为真private:boolean v; // 布尔值public://----- 默认构造函数 -----Boolean() : v(False) {} // 初始化为假//----- 构造函数 -----Boolean(int val) : v(val == 0 ? False : True) {}//----- int 型的转换函数 -----operator int() const { return v; }//----- const char* 型的转换函数 -----operator const char*() const { return v == False ? "False" : "True"; }
};//----- 向输出流 s 插入 x -----
inline std::ostream& operator<<(std::ostream& s, Boolean& x) {return s << static_cast<const char*>(x);
}#endif

其中有如下知识点:

  1. 文件结构与预编译指令
#ifndef  Class_Boolean
#define  Class_Boolean
...
#endif
作用:防止头文件被重复 #include 时产生“重复定义”错误。
  1. 枚举与成员变量
public:enum boolean { False, True };

在类内部定义假为 False、真为 True 的枚举成员.

  1. 私有成员变量
private:boolean v;

定义boolean的值为v

  1. 构造函数和转换构造函数
Boolean() : v(False) {}
Boolean(int val) : v(val == 0 ? False : True) {}
operator int() const { return v; }

函数Boolean() 表明 :数据成员 v 被初始化为 False;
构造函数Boolean(int val) 接收 int 型的值,并将其赋给形参 val。
当接收的 val 的值为 0 时,将数据成员 v 初始化为 False,其余的都可以初始化为 True。
转换构造函数operator int() 可以将得到的布尔值Boolean转换为整数值int:当接收到值为False时转换为0,当接收到值为True转换为1.

两个构造函数的作用

  1. 字符串转换
operator const char*() const {
return v == False ? "False" : "True";
}
  1. 输出流重载
inline std::ostream& operator<<(std::ostream& s, Boolean& x) {return s << static_cast<const char*>(x);
}

3. 布尔值类怎么用?

#include <iostream>
#include "Boolean.h"
using namespace std;// --- 两个整数 x 和 y 是否相等 ---
Boolean int_eq(int x, int y) {return x == y;
}int main() {int n;Boolean a; // a 的值为 False(默认构造函数)Boolean b = a; // b 的值为 False(复制构造函数)Boolean c = 100; // c 的值为 True(转换构造函数)Boolean x[8]; // x[0] 到 x[7] 的值为 False(默认构造函数)cout << "整数值:";cin >> n;x[0] = int_eq(n, 5); // x[0] 的值由 int_eq 函数返回x[1] = (n != 3); // x[1] 的值为 Boolean(n != 3)x[2] = Boolean::False; // x[2] 的值为 Falsex[3] = 1000; // x[3] 的值为 True(转换构造函数)x[4] = c == Boolean::True; // x[4] 的值为 Boolean(c == True)cout << "a的值:" << int(a) << '\n'; // 使用 int() 转换函数cout << "b的值:" << static_cast<const char*>(b) << '\n'; // 使用 const char* 转换函数for (int i = 0; i < 8; i++) {cout << "x[" << i << "] = " << x[i] << '\n'; // 使用重载的 << 运算符}return 0;
}

如果我们使整数值为 4,那么会得到如下输出:
整数值: 4
a的值: 0
b的值: False
x[0] = False
x[1] = True
x[2] = False
x[3] = True
x[4] = True
x[5] = False
x[6] = False
x[7] = False

http://www.lryc.cn/news/621799.html

相关文章:

  • 读《精益数据分析》:黏性(Stickiness)—— 验证解决方案是否留住用户
  • 自适应UI设计解读 | Fathom 企业人工智能平台
  • 5G工业一体机汽车零部件工厂的无纸化管理
  • HarmonyOS 实战:用 @Observed + @ObjectLink 玩转多组件实时数据更新
  • Go从入门到精通系列学习路线规划
  • Day62--图论--97. 小明逛公园(卡码网),127. 骑士的攻击(卡码网)
  • 智能家居【home assistant】(一)-在Windows电脑上运行home assistant
  • 论文阅读:基于大语言模型的多机器人任务分配与调度的自动 MILP 模型构建
  • GitHub 上 Star 数量前 18 的开源 AI Agent 项目
  • 基于uiautomation的自动化流程RPA开源开发演示
  • Linux网络基础(一)
  • 【补充】数据库中有关系统编码和校验规则的简述
  • 【软件设计模式】前置知识类图、七大原则(精简笔记版)
  • 【SpringBoot】SpringBoot 整合JDBC、Mybatis、Druid
  • Cursor/VSCode/VS2017 搭建Cocos2d-x环境,并进行正常的调试和运行(简单明了)
  • 基于MATLAB的机器学习、深度学习实践应用
  • WPF 监控CPU、内存性能
  • 物联网(IoT)系统中,通信协议如何选择
  • linux下找到指定目录下最新日期log文件
  • Webapi发布后IIS超时(.net8.0)
  • 【微服务】.NET8对接ElasticSearch
  • 华为实验综合小练习
  • 从源码到可执行文件:hello.c 的二进制之旅
  • Python从入门到高手9.3节: 利用字典进行格式化
  • GoLand深度解析:智能开发利器与cpolar内网穿透方案的协同实践
  • 配置国内加速源后仍然无法拉取镜像
  • Vue2与Vue3生命周期函数全面解析:从入门到精通
  • 【自动驾驶】自动驾驶概述 ② ( 自动驾驶技术路径 | L0 ~ L5 级别自动驾驶 )
  • Linux软件编程(五)(exec 函数族、system、线程)
  • Unity导航寻路轨迹可视化实现