使用转换函数重载布尔值类
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
其中有如下知识点:
- 文件结构与预编译指令
#ifndef Class_Boolean
#define Class_Boolean
...
#endif
作用:防止头文件被重复 #include 时产生“重复定义”错误。
- 枚举与成员变量
public:enum boolean { False, True };
在类内部定义假为 False、真为 True 的枚举成员.
- 私有成员变量
private:boolean v;
定义boolean的值为v
- 构造函数和转换构造函数
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.
- 字符串转换
operator const char*() const {
return v == False ? "False" : "True";
}
- 输出流重载
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