做網(wǎng)站用哪種語言推廣賺錢的平臺
1.缺省參數(shù)
缺省參數(shù)的概念:
缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。
void show(int a = 10) {cout << a << endl;
}int main() {show();show(20);return 0;
}
// 沒有傳參時,使用參數(shù)的默認值10,即輸出10
// 傳參時,使用指定的實參,即輸出20
缺省參數(shù)分類:
? ? ? ? 全缺省參數(shù):
void add(int a=10, int b=20, int c=30)
{cout << a + b + c << endl;
}int main() {add();return 0;
}
什么都不輸入即全使用默認值
? ? ?半缺省參數(shù):
void add(int a=10, int b=20, int c=30)
{cout << a + b + c << endl;
}int main() {add(3,2);return 0;
}
1. 半缺省參數(shù)必須從右往左依次來給出,不能間隔著給
2. 缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn)
3. 缺省值必須是常量或者全局變量
在聲明定義函數(shù)時,如果想要使用省缺參數(shù),聲明不能省略省缺參數(shù),定義可以
2.函數(shù)重載
? ?函數(shù)重載的概念:?
函數(shù)重載:是函數(shù)的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數(shù),這 些同名函數(shù)的形參列表(參數(shù)個數(shù)或類型或類型順序)不同,常用來處理實現(xiàn)功能類似數(shù)據(jù)類型不同的問題。
int add(int a, int b, int c) {cout << a + b + c << endl;return a + b + c;
}double add(double x, double y) {cout << x + y<<endl;return x + y;
}int add(int x, int y) {cout << x + y << endl;return x + y;
}double add(int a, double x) {cout << a + x << endl;return a + x;
}int main() {add(1, 2, 3);add(1.3, 2.2);add(1, 2);add(1, 2.3);return 0;
}
1.C語言沒辦法支持重載,因為同名函數(shù)沒辦法區(qū)分。而C++是通過函數(shù)修飾規(guī)則來區(qū)分,只要參數(shù)不同,修飾出來的名字就不一樣,就支持了重載。
2. 如果兩個函數(shù)函數(shù)名和參數(shù)是一樣的,返回值不同是不構(gòu)成重載的,因為調(diào)用時編譯器沒辦 法區(qū)分。
3.引用
引用的概念:
引用不是新定義一個變量,而是給已存在變量取了一個別名,編譯器不會為引用變量開辟內(nèi)存空 間,它和它引用的變量共用同一塊內(nèi)存空間
引用書寫格式:類型& 引用變量名(對象名) = 引用實體;
上述代碼證明了引用變量和引用實體所指向的是同一塊空間
注意:引用類型必須和引用實體是同種類型的
引用的特性:
1. 引用在定義時必須初始化
2. 一個變量可以有多個引用
3. 引用一旦引用一個實體,再不能引用其他實體
引用在定義時必須初始化:
一個變量可以有多個引用:
?引用一旦引用實體就不能再引用其他實體:
(對引用的賦值實質(zhì)為對被引用對象的賦值,以下代碼即可證明。)
?c是a的引用(也就是a這塊空間的別名),當(dāng)b給c賦值時,其實是在給a賦值,使得a,c這塊空間的值變?yōu)?0
常引用(const引用)
??const引用即將引用與const對象綁定。由于const引用是為const對象取別名,故無法通過修改const引用修改被引用的const對象。
int main() {const int a = 10;//int &ra = a; //報錯,a為常量,而ra為非常量引用const int& ra = a;//正確寫法,const修飾將ra變?yōu)槌R?/int& b = 10;//報錯,b為常量,10為常量,而b為非常量引用const int& b = 10;//正確寫法,const修飾的引用為常引用double x = 1.23;// int& ra = x;//類型不同,報錯const int& ra = x;//正確寫法
}
第三種正確寫法的原因是x先隱式轉(zhuǎn)化為const修飾的臨時變量,然后臨時變量再被ra引用
編譯器其實執(zhí)行了以下兩步:
const int tmp = x;const int& ra = x;
使用場景:
? ? 做參數(shù):
交換兩個數(shù)
void swap(int& x, int& y) {int tmp = x;x = y;y = tmp;
}int main() {int a = 10;int b = 20;swap(a, b);cout << a << endl << b << endl;
}
之前在c語言階段,交換兩個數(shù)使用指針進行交換的
引用相當(dāng)于別名,當(dāng)引用作為參數(shù)時,他和實參指向的是同一塊空間
做返回值:
int& add(int x, int y) {int c = x + y;return c;
}int main() {cout << add(1, 2) << endl;return 0;
}
注意:如果函數(shù)返回時,出了函數(shù)作用域,如果返回對象還在(還沒還給系統(tǒng)),則可以使用 引用返回,如果已經(jīng)還給系統(tǒng)了,則必須使用傳值返回。
傳值和傳引用效率比較:
以值作為參數(shù)或者返回值類型,在傳參和返回期間,函數(shù)不會直接傳遞實參或者將變量本身直 接返回,而是傳遞實參或者返回變量的一份臨時的拷貝,因此用值作為參數(shù)或者返回值類型,效率是非常低下的,尤其是當(dāng)參數(shù)或者返回值類型非常大時,效率就更低。
引用和指針的區(qū)別:
1. 引用概念上定義一個變量的別名,指針存儲一個變量地址。
2. 引用在定義時必須初始化,指針沒有要求
3. 引用在初始化時引用一個實體后,就不能再引用其他實體,而指針可以在任何時候指向任何 一個同類型實體
4. 沒有NULL引用,但有NULL指針
5. 在sizeof中含義不同:引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32 位平臺下占4個字節(jié))
6. 引用自加即引用的實體增加1,指針自加即指針向后偏移一個類型的大小?
7. 有多級指針,但是沒有多級引用
8. 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理
9. 引用比指針使用起來相對更安全