1,逻辑运算符的原生语义:

1,操作数只有两种值(true 和 false);

1,C 语言中只有非 0 和 0;

2,逻辑表达式不用完全计算就能确定最终值;

1,短路规则;

3,最终结果只能是 true 或者 false;

2,逻辑表达式编程实验:

1,main.cpp 文件:

 #include <iostream>
#include <string> using namespace std; int func(int i)
{
cout << "int func(int i) : i = " << i << endl; return i;
} int main()
{
if( func() && func() ) // func(1) 不会被调用;
{
cout << "Result is true!" << endl;
}
else
{
cout << "Result is false!" << endl;
} cout << endl; if( func() || func() ) // func(0) 和 func(1) 都被调用;
{
cout << "Result is true!" << endl;
}
else
{
cout << "Result is false!" << endl;
} return ;
}

3,逻辑操作符可以重载吗?重载逻辑操作符有什么意义?

1,可以重载;

4,重载逻辑操作符编程实验:

1,main.cpp 文件:

 #include <iostream>
#include <string> using namespace std; class Test
{
int mValue;
public:
Test(int v)
{
mValue = v;
}
int value() const
{
return mValue;
}
}; /* 逻辑操作符必须返回 bool 类型 */
bool operator && (const Test& l, const Test& r)
{
return l.value() && r.value();
} bool operator || (const Test& l, const Test& r)
{
return l.value() || r.value();
} Test func(Test i)
{
cout << "Test func(Test i) : i.value() = " << i.value() << endl; return i;
} int main()
{
Test t0();
Test t1(); if( func(t0) && func(t1) ) // ==> operator && (func(t0), func(t1))
{
cout << "Result is true!" << endl;
}
else
{
cout << "Result is false!" << endl;
} cout << endl; if( func() || func() ) // ==> operator || (func(0), func(1))
{
cout << "Result is true!" << endl;
}
else
{
cout << "Result is false!" << endl;
} return ;
}

 2,输出结果:

 Test func(Test i) : i.value() =
Test func(Test i) : i.value() =
Result is false! Test func(Test i) : i.value() =
Test func(Test i) : i.value() =
Result is true!

3,重载的逻辑操作符都是从左向右调用操作数,短路规则不再适用;

5,重载逻辑操作符:

1,问题的分析:

1,C++ 通过函数调用扩展操作符的功能;

1,调用重载函数需要将两个操作数传递给函数进行调用,这就是问题的本质;

2,进入函数体前必须完成所有函数参数的计算;

3,函数参数的计算次序是不定的;

4,短路法则完全失效;

2,逻辑操作符重载后无法完全实现原生的语义;

1,无法通过函数调用满足短路规则;

3,一些有用的建议:

1,实际工程开发中避免重载逻辑操作符;

2,通过重载比较操作符代替逻辑操作符重载;

1,将一个对象与 true 或 false 比较,来重载;

3,直接使用成员函数代替逻辑操作符重载;

4,使用全局函数对逻辑操作符进行重载;

1,当必须实现逻辑操作符的重载时,用全局函数实现;

6,小结:

1,C++ 从语法上支持逻辑操作符重载;

2,重载后的逻辑操作符不满足短路法则;

3,工程开发中不要重载逻辑操作符;

4,通过重载比较操作符替换逻辑操作符重载;

5,通过专用成员函数替换逻辑操作符重载;

C++中逻辑操作符的重载分析的更多相关文章

  1. python中的逻辑操作符

    python中主要有三个逻辑操作符,分别是:and.or.not. and:且,所有人为真才为真. or:或,一个为正就是真. not:非,取反. >>> print(3>2 ...

  2. php逻辑操作符中&和&&的异同

    php有5种算术操作符(+ - * / %),6种赋值操作符(+= -= *= /= %= .=),8种比较操作符(=== < > <= >= != <> !==) ...

  3. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  4. 逻辑操作符---Lua: and,or,not 对比 C++:&&,||,!

    lua中有三个逻辑操作符:and,or,not(逻辑与,逻辑或,逻辑非),同样c++也有类似的三个逻辑操作符:&&,||,!(逻辑与,逻辑或,逻辑非).他们的运算对象就是真和假.lua ...

  5. 你好,C++(17)0.1*10不等于1.0——4.1.4 关系操作符4.1.5 逻辑操作符

    4.1.4  关系操作符 在C++中,除了需要用算术操作符对数据进行加减乘除的算术操作之外,我们有时候还需要对数据之间的关系进行操作,也就是对两个数据进行大小比较,得出它们之间的大小关系.在现实世界中 ...

  6. Javascript赋值语句中的“&&”操作符和"||"操作符

    有这么一种常见的语句: var a = a || 4; 那赋值语句中的"&&"操作符和"||"操作符是什么意思?如何知道这两个逻辑操作符两旁的数 ...

  7. shell 的条件表达式及逻辑操作符简单介绍

    查看系统的shell: cat /etc/shells 文件测试表达式: -f 文件  文件存在且为普通文件则真,即测试表达式成立. -d 文件  文件存在且为目录文件则真,即测试表达式成立. -s ...

  8. shell 中的操作符

    1.算术操作符 2.关系操作符 3.布尔操作符 4.字符串操作符 5.文件相关操作符 算术操作符 bash shell 没有提供任何机制来执行简单的算术运算,不过我们可以借助于一些其他程序,如 exp ...

  9. 《C++ Primer Plus》读书笔记之四—分支语句和逻辑操作符

    第六章 分支语句和逻辑操作符 1.&&的优先级低于关系操作符. 2.取值范围:取值范围的每一部分都使用AND操作符将两个完整的关系表达式组合起来: if(age>17&& ...

随机推荐

  1. httpclient请求接口,上传文件附加参数(.net core)

    /// <summary> /// 上传文件 - 武汉站点 /// </summary> [HttpPost] public IActionResult UploadWH(Re ...

  2. 基于GPU的图像处理平台

    基于GPU的图像处理平台 1.  (309)英伟达推Jetson TX1 GPU模块力推人工智能 1.1 产品概述 Jetson TX1 GPU模块,主要针对近年来蓬勃发展的人工智能市场,包括无人机. ...

  3. Oracle数据库同义词

    一.定义 同义词顾名思义,是数据库方案对象的一个别名.这里的数据库方案对象指表.视图.序列.存储过程.包等. 二.同义词的好处 1.不占内存空间,节省大量的数据库空间 2.简化了数据库对象的访问 3. ...

  4. [SDOI2017]数字表格 (莫比乌斯反演)

    链接:https://ac.nowcoder.com/acm/problem/20391来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  5. HDU 6686 Rikka with Travels 树的直径

    题意:定义两点之间的距离为从一个点到另一个点经过的点数之和(包括这两个点),设二元组(x, y)为两条不相交的路径,一条长度为x,一条长度为y,问二元组(x, y)出现了多少次? 思路:直接上jls的 ...

  6. CSAW CTF Qualification Round 2018 - shell->code

    原题 Linked lists are great! They let you chain pieces of data together. nc pwn.chal.csaw.io 9005 链接:h ...

  7. bootz to be continued

    dmesgcat /proc/interrupts cat /proc/meminfocat /proc/cpuinfo top bootz 0x10000000 0x12000000 0x11000 ...

  8. bzoj4922 [Lydsy1706月赛]Karp-de-Chant Number 贪心+背包

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4922 题解 记录每一个串的没有匹配的右括号 \()\) 的数量为 \(a_i\),为匹配的左括 ...

  9. python之 matplotlib模块之基本三图形(直线,曲线,直方图,饼图)

    matplotlib模块是python中一个强大的绘图模块 安装 pip  install matplotlib 首先我们来画一个简单的图来感受它的神奇 import numpy as np impo ...

  10. 51nod 1122:机器人走方格 V4 (矩阵快速幂)

    题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][ ...