当前位置: 首页 > 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.dtcms.com/a/332741.html

相关文章:

  • 申请第二个域名还要备案吗
  • 《软件工程导论》实验报告四 详细设计工具
  • 两幅美国国旗版权挂钩专利发起跨境诉讼
  • 云原生俱乐部-杂谈2
  • 机器学习之PCA降维
  • uniapp 开发微信小程序,获取经纬度并且转化详细地址(单独封装版本)
  • week1-[顺序结构]跑道
  • IStoreOS(OpenWrt)开启IPV6
  • 设备数据采集服务器软件TOP Server OPC Server详细介绍
  • wsl安装完美教程
  • Vulnhub Deathnote靶机复现攻略
  • 告别手动优化!React Compiler 自动记忆化技术深度解析
  • 16进制pcm数据转py波形脚本
  • Vim 常用快捷键及插件
  • 关于simplifyweibo_4_moods数据集的分类问题
  • 大白话解析“入口点合约”
  • Linux系统--库制作与原理
  • Java—注解
  • mysql-条件查询案例
  • zabbix部署问题后常见问题
  • Codeforces 无路可走
  • 分布式系统设计的容错机制
  • AI优质信息源汇总:含X账号,Newsletter,播客,App
  • 如何在 FastAPI 中玩转 APScheduler,让任务定时自动执行?
  • 上下文块嵌入(contextualized-chunk-embeddings)
  • collections:容器数据类型
  • C语言——深入理解指针(四)
  • 完整技术栈分享:基于Hadoop+Spark的在线教育投融资大数据可视化分析系统
  • 使用XXL-SSO实现登录认证以及权限管控
  • 解决 MySQL 查询速度缓慢的问题