1,邏輯運算子的原生語義:
1,運算元只有兩種值(true 和 false);
1,c 語言中只有非 0 和 0;
2,邏輯表示式不用完全計算就能確定最終值;
1,短路規則;
3,最終結果只能是 true 或者 false;
2,邏輯表示式程式設計實驗:
1,main.cpp 檔案:
1 #include 2 #include 34using
namespace
std;56
int func(inti)7
1213
intmain()
1419
else
2023
24 cout <2526
if( func(0) || func(1) ) //
func(0) 和 func(1) 都被呼叫;
2730
else
3134
35return0;
36 }
3,邏輯操作符可以過載嗎?過載邏輯操作符有什麼意義?
1,可以過載;
4,過載邏輯操作符程式設計實驗:
1,main.cpp 檔案:
1 #include 2 #include 34using
namespace
std;56
class
test714
int value() const
1518
};19
20/*
邏輯操作符必須返回 bool 型別
*/21
bool
operator && (const test& l, const test&r)
2225
26bool
operator || (const test& l, const test&r)
2730
31test func(test i)
3237
38int
main()
3947
else
4851
52 cout <5354
if( func(1) || func(0) ) //
==> operator || (func(0), func(1))
5558
else
5962
63return0;
64 }
2,輸出結果:
1 test func(test i) : i.value() = 12 test func(test i) : i.value() = 0
3 result is
false!
45 test func(test i) : i.value() = 0
6 test func(test i) : i.value() = 1
7 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 中的邏輯操作符過載
邏輯操作符的原生語義如下 我們先來看一下邏輯表示式的輸出結果 include include using namespace std intfunc int i intmain else cout endl if func 0 func 1 else return0 我們看一下過載邏輯操作符後其語義...
C 中逗號操作符過載的分析
1,關注逗號操作符過載後帶來的變化 2,逗號操作符 1,逗號操作符 可以構成都好表示式 exp1,exp2,exp3,expn 1,逗號表示式用於將多個表示式連線為乙個表示式 1,就是用來起連線不同語句作用的 2,逗號表示式的值為最後乙個子表示式的值 1,最後乙個必須有值 3,逗號表示式中的前 n ...
c 中 操作符過載
操作符過載 1.有先後順序,如 t3 t1 t2 則t1 t2等價於t1.operate t2 2.對 操作符進行過載時,如aa是有本質區別的。操作符過載就是用函式的方法對乙個操作符進行重新定義,在該函式中定義了操作符所要完成的功能。其中cout是輸出流ostream中的物件 元素 3.a cout...