運算符重載,就是對已有的運算符重新進行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類型。
1.若﹣2amb4與5an+2b2m+n可以合并成一項,求mn的值____________ 2.已知實數(shù)a,b,c滿足a2+b2=1,b2+c2=2,c2+a2=2,求ab+bc+ca的最小值____...
有效數(shù)字的運算應(yīng)遵循怎樣的運算規(guī)則
有效數(shù)字運算規(guī)則 由于與誤差傳遞有關(guān),計算時加減法和乘除法的運算規(guī)則不太相同。1.加減法先按小數(shù)點后位數(shù)最少的數(shù)據(jù)保留其它各數(shù)的位數(shù),再進行加減計算,計算結(jié)果也使小數(shù)點后保留相同的位數(shù)。2.乘除法先按...
選中提示內(nèi)容 把構(gòu)建刪掉重新畫
格式:pdf
大?。?span id="uexizsa" class="single-tag-height">324KB
頁數(shù): 25頁
評分: 4.6
序號 圖 形 符 號 說 明 1 開關(guān) (機械式 ) 2 多級開關(guān)一般符號多 線表示 3 (在非動作位置觸點斷 開) 4 接觸器 (在非動作位置 觸點閉合 ) 5 負荷開關(guān) (負荷 ) 6 具有自動釋放功能的 負荷開關(guān) 7 熔斷器式斷路器 8 斷路器 9 隔離開關(guān) 10 熔斷器一般符號 11 跌落式熔斷器 12 熔斷器式開關(guān) 13 熔斷器式隔離開關(guān) 14 熔斷器式負荷開關(guān) 15 熔斷器式負荷開關(guān) 16 當(dāng)操作器件被吸合時 延時閉合的動合觸點 17 當(dāng)操作器件被釋放時 延時閉合的動合觸點 18 當(dāng)操作器件被釋放時 延時閉合的動斷觸點 19 當(dāng)操作器件被吸合時 延時閉合的動斷觸點 20 當(dāng)操作器件被吸合時 延時閉合和釋放時延 時斷開的動合觸點 21 按鈕開關(guān) (不閉鎖 ) 22 旋鈕開關(guān)、旋轉(zhuǎn)開關(guān) (閉鎖 ) 23 位置開關(guān) ,動合觸點 限制開關(guān) ,動合觸點 24 位置開關(guān) ,動斷觸點 限制開
格式:pdf
大小:324KB
頁數(shù): 12頁
評分: 4.5
通 風(fēng) 空 調(diào) 設(shè) 計 統(tǒng) 一 圖 例 電動對開式多葉調(diào)節(jié)閥: (電訊號比例調(diào)節(jié)風(fēng)閥) 電動多葉送風(fēng)(排煙)口:電訊號瞬間開啟或就地手動開啟,電動或手動復(fù)位。 定風(fēng)量調(diào)節(jié)閥: 70℃防火閥: 70°C熔斷關(guān)閉,手動復(fù)位。 150℃防火閥: 150°C熔斷關(guān)閉,手動復(fù)位。 280℃防火閥: 280°C熔斷關(guān)閉,手動復(fù)位。 70℃防火調(diào)節(jié)閥: 70°C熔斷關(guān)閉,手動復(fù)位;手動調(diào)節(jié)風(fēng)量。 280℃防火調(diào)節(jié)閥:電訊號瞬間自動開啟 (或關(guān)閉 ), 并輸出電信號 ,280℃熔斷關(guān)閉 ,電動或手 動復(fù)位。 70℃電動防火閥:電訊號瞬間自動關(guān)閉 , 并輸出電信號 ;電訊號再次自動開啟 ,70℃熔斷關(guān)閉 , 電動或手動復(fù)位。 280℃電動防火閥:電訊號瞬間自動關(guān)閉 ,并輸出電信號 ;電訊號再次自動開啟 ,280℃熔斷關(guān) 閉 ,電動或手動復(fù)位。 電動密閉閥: 風(fēng)管止回閥: 加壓閥:常閉,電訊號自動開啟。 單層
1)非參數(shù)化多態(tài)(Ad-hoc polymorphism):
a)函數(shù)重載(Function Overloading)
b)運算符重載(Operator Overloading)
2)參數(shù)化多態(tài)(Parametric polymorphism)
c)模板(Template)
其實非參數(shù)化多態(tài)和參數(shù)化多態(tài)并不沖突,而且相輔相成,它們混合使用能夠帶來更大的靈活性,函數(shù)模板重載就是很好的例子:
template
T max(const T& lhs, const T& rhs)
{
return lhs > rhs "para" label-module="para">
}
template
T max(const T& fst, const T& sec, const T& thd)
{
return max(max(fst, sec), thd);
}
使用:
max(1, 3, 5);
max(2.4, 4.2);
兩個重載函數(shù)必須在下列一個或兩個方面有所區(qū)別:
1、函數(shù)有不同參數(shù)。
2、函數(shù)有不同參數(shù)類型,
C++的這種編程機制給編程者極大的方便,不需要為功能相似、參數(shù)不同的函數(shù)選用不同的函數(shù)名,也增強了程序的可讀性。
C++運算符重載的相關(guān)規(guī)定如下:
(1)不能改變運算符的優(yōu)先級;
(2)不能改變運算符的結(jié)合型;
(3)默認參數(shù)不能和重載的運算符一起使用;
(4)不能改變運算符的操作數(shù)的個數(shù);
(5)不能創(chuàng)建新的運算符,只有已有運算符可以被重載;
(6)運算符作用于C++內(nèi)部提供的數(shù)據(jù)類型時,原來含義保持不變。
不同編程范例中的表現(xiàn)形式
注:由于C 同時支持下面要提到的三種編程范例(Programming Paradigm) ,所以就用C 語言為例來說明
C 中對靜多態(tài)的支持方式有:全局函數(shù)重載和運算符重載。
全局函數(shù)重載代碼:
一下代碼中均不考慮函數(shù)的返回類型,因為C 中不允許只有函數(shù)類型不同的重載。
1)參數(shù)個數(shù)不同而參數(shù)類型相同(對應(yīng)位置):
void defParamNum(int paramFst);
void defParamNum(int paramFst, double paramSec);
2)參數(shù)個數(shù)相同而參數(shù)類型不同:
void defParamType (int paramFst, double paramSec);
void defParamType (double paramFst, int paramSec);
3)參數(shù)個數(shù)和參數(shù)類型都不相同:
void defBoth(int paramFst);
void defBoth(double paramFst, int paramSec);
運算符重載代碼:
其實運算符重載也是一種函數(shù)重載。其中多了一些限制,比如一元運算符、二元運算符所要求的參數(shù)個數(shù),還有運算符重載的元型(Prototype)都有明確的規(guī)定,再就是一些像C語言等不支持運算符重載,所以這里單獨列出來。
一元運算符重載:(負值運算符 operator -)
Complex operator – (const Complex& elem)
{
// 復(fù)數(shù)temp的值為0 0i
Complex temp;
// 將temp的實部設(shè)為elem實部負數(shù)
temp.setReal(-elem.getReal());
// 將temp的虛部設(shè)為elem虛部的負數(shù)
temp.setImage(-elem.getImage());
// 返回temp復(fù)數(shù),此時temp就是elem對應(yīng)的負數(shù)了
return temp;
}
二元運算符重載:(加法運算符 operator )
Complex operator (const Complex& lhs, const Complex& rhs)
{
// 復(fù)數(shù)temp的值為0 0i
Complex temp;
// 將temp的實部設(shè)為lhs和rhs實部的和
temp.setReal(lsh.getReal() rhs.getReal());
// 將temp的虛部設(shè)為lhs和rhs虛部的和
temp.setImage(lsh.getImage() rhs.getImage());
// 返回temp復(fù)數(shù),此時的temp就是lhs和rhs的和
return temp;
}
其實面向?qū)ο缶幊蹋∣bject-Oriented Programming)中也表現(xiàn)為函數(shù)重載和運算符重載。
函數(shù)重載:成員函數(shù)重載,靜態(tài)成員函數(shù)(static)重載,虛函數(shù)重載,友元函數(shù)重載。
class Complex {
public:
// 構(gòu)造函數(shù)重載:
Complex() : m_real(0), m_image(0) { };
Complex(double real, double image) : m_real(real), m_image(image) { };
// 靜態(tài)成員函數(shù)重載:不恰當(dāng)?shù)睦?
staticvoid staticFunc()
{
std::cout << "staticFunc()" << std::endl;
}
staticvoid staticFunc(int oneParam)
{
std::cout << "staticFunc(int oneParam)" << std::endl;
}
// 虛函數(shù)重載:不恰當(dāng)?shù)睦?
virtualvoid virtualFunc()
{
std::cout << "virtualFunc()" << std::endl;
}
virtualvoid virtualFunc(int oneParam)
{
std::cout << "virtualFunc(int oneParam)" << std::endl;
}
// 虛函數(shù)重載:不恰當(dāng)?shù)睦?。其友元函?shù)就是一般的全局函數(shù)
friendvoid friendFunc();
friendvoid friendFunc(int oneParam);
// 運算符重載:Comple Comple
// Complex Complex成員版本:允許一個complex對象和另一個Complex對象相加
Complex operator (const Complex& elem)
{
return Complex(m_real elem.m_real, m_image elem.m_image);
}
// Complex double成員版本:允許一個complex對象和另一個double對象相加
// 只能是Complex double,不能是double Complex
Complex operator (double elem)
{
return Complex(m_real elem, m_image);
}
// Complex Complex友元版本:允許一個complex對象和另一個Complex對象相加
friend Complex operator (const Complex& lsh, const Complex& rhs)
{
return Complex(lsh.m_real rhs.m_real, lsh.m_image rhs.m_image);
}
// Complex double友元版本:允許一個complex對象和另一個double對象相加
// 只能是Complex double,不能是double Complex
friend Complex operator (const Complex& lsh, double rhs)
{
return Complex(lsh.m_real rhs, lsh.m_image);
}
// double Complex友元版本:允許一個double對象和另一個Complex對象相加
//只能是double Complex,不能是Complex double
//和上面的Complex double友元版本相輔相成
friend Complex operator (double lhs, const Complex& rhs)
{
return Complex(lhs rhs.m_real, rhs.m_image);
}
private:
double m_real;
double m_image;
};
void friendFunc()
{
std::cout << "virtualFunc()" << std::endl;
}
void friendFunc(int oneParam)
{
std::cout << "virtualFunc(int oneParam)" << std::endl;
}
運算符重載:運算符成員式重載,運算符友元式重載。
注:見Complex類定義中的運算符重載部分!
在C 中,泛型編程(Generic Programming) 是通關(guān)過模板來實現(xiàn)的,然而模板不是與上述兩種編程范例有所不同,它必須依附于上述的某種范例,在某范例的基礎(chǔ)上來實現(xiàn),就像面向?qū)ο蠛瓦^程化編程的關(guān)系一樣。下面就是模板分類:
按泛化對象可分為:
1)類型泛化(Type):
template
class List {
// ...
};
List iList; // iList是能夠存儲int類型的鏈表對象
2)數(shù)值泛化(Value):
template
class Bit {
// ...
};
Bit<3> bit3; // bit3是長度為3位的位對象
3)數(shù)值和類型泛化(Type & Value):
template
class Array {
// ...
};
Array iArray3; // iArray3是能夠存儲3個int類型的數(shù)組對象
按泛化的載體可分為:
函數(shù)模板:
template
void functionGeneric()
{
// ...
}
類模板:
template
class classGeneric {
// ...
};