中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

做網(wǎng)站上傳照片的尺寸搜索排名優(yōu)化公司

做網(wǎng)站上傳照片的尺寸,搜索排名優(yōu)化公司,設(shè)計師網(wǎng)站欣賞,經(jīng)營網(wǎng)站 備案查詢目錄 前言 1.缺省參數(shù) 2.函數(shù)重載 2.1函數(shù)重載的基本規(guī)則 ?編輯2.2注意事項 2.3 重載解析(Overload Resolution)--補充內(nèi)容 3.引用 3.1引用的概念和定義 3.2引用的特性 3.3引用的使用 3.4const引用 4.指針和引用的關(guān)系 結(jié)束語 前言 上節(jié)小編…

目錄

前言

1.缺省參數(shù)

2.函數(shù)重載

?2.1函數(shù)重載的基本規(guī)則

?編輯2.2注意事項

2.3 重載解析(Overload Resolution)--補充內(nèi)容

3.引用

3.1引用的概念和定義

3.2引用的特性

3.3引用的使用

3.4const引用

4.指針和引用的關(guān)系

結(jié)束語

前言

上節(jié)小編講解了命名空間和函數(shù)的輸入輸出,本節(jié)將講解缺省參數(shù),函數(shù)重載等知識。

1.缺省參數(shù)

缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實參,則采用該形參的缺省值,否則使用指定的實參,缺省參數(shù)分為全缺省和半缺省參數(shù)。(有些地方把缺省參數(shù)也叫默認參數(shù))
全缺省就是全部形參給缺省值,半缺省就是部分形參給缺省值。C++規(guī)定半缺省參數(shù)必須從右往左
依次連續(xù)缺省,不能間隔跳躍給缺省值。
例如(錯誤示范)
void func(int a, double b = 3.14, const char* c = "default") { // 正確// 函數(shù)體
}void func(int a = 1, double b, const char* c = "default") { // 錯誤,不能跳過 b// 函數(shù)體
}
#include <iostream>
using namespace std;
void func(int x=0) {cout << x << endl;
}
int main() {
// 沒有傳參時,使?參數(shù)的默認值
// 傳參時,使?指定的實參func();func(10);return 0;
}

運行結(jié)果:

0

10

帶缺省參數(shù)的函數(shù)調(diào)用,C++規(guī)定必須從左到右依次給實參,不能跳躍給實參。
#include <iostream>
using namespace std;
// 全缺省
void Func1(int a = 10, int b = 20, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
// 半缺省
void Func2(int a, int b = 10, int c = 20)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
int main()
{Func1();Func1(1);Func1(1, 2);Func1(1, 2, 3);Func2(100);Func2(100, 200);Func2(100, 200, 300);Func2(100, ,300);//錯誤return 0;
}

03e0f99269104ad9857a995b841d7c85.png

函數(shù)聲明和定義分離時,缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn),規(guī)定必須函數(shù)聲明給缺省
值。
// 在頭文件中的函數(shù)聲明
void func(int a = 1, double b = 3.14, const char* c = "default");// 在源文件中的函數(shù)定義
void func(int a, double b, const char* c) {// 函數(shù)體
}

2.函數(shù)重載

在C++中,函數(shù)重載(Function Overloading)是指在同一作用域內(nèi)可以存在多個同名函數(shù),但這些函數(shù)的參數(shù)列表(參數(shù)的個數(shù)、類型或者順序)必須不同。編譯器會根據(jù)傳遞給函數(shù)的參數(shù)來決定調(diào)用哪一個重載版本。

?2.1函數(shù)重載的基本規(guī)則
?

1.參數(shù)數(shù)量不同:函數(shù)可以具有不同數(shù)量的參數(shù)。

#include <iostream>
using namespace std;
int Add(int a, int b) {return a + b;
}int Add(int a, int b, int c) { return a + b + c;
}int main() {int sum1 = Add(10, 20);   double sum2 = Add(10,20,30); cout << "sum1: " << sum1 << endl;cout << "sum2: " << sum2 << endl;return 0;
}

7a6272792b2f45329a1ae531db18f8ee.png
2. 參數(shù)類型不同:函數(shù)可以具有不同類型的參數(shù)。

#include <iostream>
using namespace std;
int add(int a, int b) {cout << "int add(int a, int b)"<<endl;return a + b;}
double add(double a, double b) {cout << "double add(double a, double b)"<<endl;return a + b;}
int main() {int sum1 = add(10, 20);   double sum2 = add(1.5, 2.5); cout << "sum1: " << sum1 << endl;cout << "sum2: " << sum2 << endl;return 0;
}

f1f6cddca9174c738581aee06c9f704e.png
3. 參數(shù)順序不同:如果參數(shù)類型相同,但順序不同,也可以構(gòu)成重載。

#include <iostream>
using namespace std;
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}
int main() {f(10, 'c');f('c', 10);return 0;
}

668ff08bb9574e458d0164b9479f4544.png

2.2注意事項

- 返回類型:函數(shù)重載與返回類型無關(guān),即不能僅通過改變返回類型來重載函數(shù)。
-默認參數(shù):使用默認參數(shù)的函數(shù)可能會導(dǎo)致重載解析的歧義,應(yīng)當小心使用。

int Add(int a, int b) {return a + b;
}double Add(int a, int b) { // 錯誤:不能僅通過返回類型來重載return static_cast<double>(a + b);
}
#include <iostream>
using namespace std;// 下?兩個函數(shù)構(gòu)成重載
// f()但是調(diào)?時,會報錯,存在歧義,編譯器不知道調(diào)?誰
void f()
{cout << "f()" << endl;
}
void f(int a = 10)
{cout << "f(int a)" << endl;
}
int main() {f();return 0;
}

fd43ff7a5a1a4f20832734c981822d9e.png

2.3 重載解析(Overload Resolution)--補充內(nèi)容

當調(diào)用一個重載函數(shù)時,編譯器會根據(jù)提供的實參和每個重載函數(shù)的形參列表進行匹配,以確定調(diào)用哪一個函數(shù)。這個過程稱為重載解析。如果編譯器無法明確地確定應(yīng)該調(diào)用哪個函數(shù),或者找到多個合適的匹配,就會產(chǎn)生編譯錯誤。

函數(shù)重載是C++多態(tài)性的一種形式,它允許程序員使用相同的名字來執(zhí)行相似的操作,這增強了代碼的清晰性和可讀性。

3.引用

3.1引用的概念和定義

在 C++ 中,引用是一個變量的別名。一旦一個引用被初始化為指向一個對象,它就不能被重新綁定到另一個對象。這與指針不同,指針可以在任何時候指向不同的對象。

引用的概念

  • 別名:引用為另一個變量提供了一個額外的名字,它和原變量指向相同的內(nèi)存位置。
  • 不可變性:一旦引用被初始化,它就不能被重新賦值為另一個變量的引用。
  • 無需解引用:使用引用時,不需要像指針一樣使用?*?操作符來訪問引用的值。
  • 效率:引用在傳遞參數(shù)時可以避免不必要的復(fù)制,特別是對于大型對象來說,使用引用可以提高效率。

引用的定義

引用在 C++ 中是這樣定義的:

類型 &引用名 = 原變量名;

一些有趣的實例:

比如:水滸傳中李逵,宋江叫"鐵牛",江湖上人稱"黑旋風";林沖,外號豹子頭;

這里,類型?是原變量的類型,&?符號用于聲明引用,引用名?是你給引用起的名字,而?原變量名?是已經(jīng)存在的變量。

1f4ad6d33e3f44d49138ef72580f55b2.png

#include <iostream>
using namespace std;
int main() {int a = 520;int& b = a;int& c = a;int& d = b;++d;
// 引?:b和c是a的別名cout << &a << endl;cout << &b << endl;cout << &c << endl;
// 也可以給別名b取別名,d相當于還是a的別名cout << &d << endl;
//地址,值都是一樣的cout << a << endl;cout << b << endl;cout << c << endl;cout << d << endl;return 0;
}

e4fe0f1e22424434810ab50ad72d01dc.png

3.2引用的特性

? 引用在定義時必須初始化
? 一個變量可以有多個引用
? 引用一旦引用一個實體,再不能引用其他實體
#include<iostream>
using namespace std;
int main()
{int a = 10;// 編譯報錯:“ra”: 必須初始化引?//int& ra;int& b = a;int c = 20;// 這?并?讓b引?c,因為C++引?不能改變指向,// 這?是?個賦值b = c;cout << a << endl;cout << b << endl;cout << c << endl;b = 30;cout << &a << endl;cout << &b << endl;cout << &c << endl;cout << a << endl;cout << b << endl;cout << c << endl;return 0;
}

c4480a75ea4b458eb7c23cc2e3926981.png

3.3引用的使用

1.引用在實踐中主要是于引用傳參和引用做返回值中減少拷貝提高效率和改變引用對象時同時改變被引用對象。
2.引用傳參跟指針傳參功能是類似的,引用傳參相對更方便一些。
3.引用返回值的場景相對比較復(fù)雜,小編實力有限,以后等知識豐富了再會詳細講解。
4.引用和指針在實踐中相輔相成,功能有重疊性,但是各有特點,互相不可替代。C++的引用跟其他語言的引用(如Java)是有很大的區(qū)別的,除了用法,最大的點,C++引用定義后不能改變指向,java的引用可以改變指向。
5.一些主要用C代碼實現(xiàn)版本數(shù)據(jù)結(jié)構(gòu)教材中,使用C++引用替代指針傳參,用的是簡化程序,避開復(fù)雜的指針。
代碼實例:
#include <iostream>
using namespace std;
void Swap(int& x, int& y) {int temp = x;x = y;y = temp;
}
int main() {int x = 520, y = 1314;cout << x << " " << y << endl;Swap(x, y);cout << x << " " << y << endl;return 0;
}

816ca5a6fbd5403c9824d39573ac5af3.png

#include<iostream>
#include <assert.h>
#include <stdlib.h> using namespace std;
typedef int STDataType;
typedef struct Stack {STDataType* a;int top;int capacity;
} ST;void STInit(ST& rs, int n = 4) {rs.a = (STDataType*)malloc(n * sizeof(STDataType));rs.top = 0; // 棧頂初始化為 0,表示棧為空rs.capacity = n;
}void STPush(ST& rs, STDataType x) {// 滿了,擴容if (rs.top == rs.capacity) {printf("擴容\n");int newcapacity = rs.capacity == 0 ? 4 : rs.capacity * 2;STDataType* tmp = (STDataType*)realloc(rs.a, newcapacity * sizeof(STDataType));if (tmp == NULL) {perror("realloc fail");return;}rs.a = tmp;rs.capacity = newcapacity;}rs.a[rs.top] = x; rs.top++; // 棧頂指針上移
}int& STTop(ST& rs) {assert(rs.top > 0); // 確保棧不為空return rs.a[rs.top - 1]; // 返回棧頂元素的引用
}int main() {ST st1;STInit(st1);STPush(st1, 1);STPush(st1, 2);cout << STTop(st1) << endl; // 輸出棧頂元素 2STTop(st1) += 10; // 通過引用修改棧頂元素cout << STTop(st1) << endl; // 輸出修改后的棧頂元素 12return 0;
}

bc232eec8078412581694a024397c8b1.png

3.4const引用

在 C++ 中,const?引用是一種特殊類型的引用,它被用來引用一個對象,同時保證這個引用不會修改所引用的對象。這種引用通常用于函數(shù)參數(shù),以允許函數(shù)讀取傳遞的對象,但不允許通過引用修改它。

以下是?const?引用的幾個關(guān)鍵點:

聲明?const?引用

const 類型 &引用名 = 引用的對象;

這里,類型?是被引用對象的類型,引用名?是你給引用起的名字,而?引用的對象?是你想要引用的實際對象。

使用?const?引用的好處

  • 保護數(shù)據(jù)不被修改:通過?const?引用,你可以確保傳遞給函數(shù)的參數(shù)不會被函數(shù)修改。
  • 可以引用臨時對象和字面量const?引用可以引用右值(如字面量或臨時對象),這是非?const?引用無法做到的。
  • 可以與任何類型的對象兼容:只要類型可以轉(zhuǎn)換為?const?引用的類型,就可以創(chuàng)建?const?引用。

示例

不需要注意的是類似 int& rb = a*3; double d = 12.34; int& rd = d; 這樣一些場景下a*3的和結(jié)果保存在一個臨時對象中, int& rd = d 也是類似,在類型轉(zhuǎn)換中會產(chǎn)生臨時對象存儲中間值,也就是時,rb和rd引用的都是臨時對象,而C++規(guī)定臨時對象具有常性,所以這里就觸發(fā)了權(quán)限放大,必須要用常引用才可以。
int main()
{
const int a = 10;
// 編譯報錯:error C2440: “初始化”: ?法從“const int”轉(zhuǎn)換為“int &”
// 這?的引?是對a訪問權(quán)限的放?
//int& ra = a;
// 這樣才可以
const int& ra = a;
// 編譯報錯:error C3892: “ra”: 不能給常量賦值
//ra++;
// 這?的引?是對b訪問權(quán)限的縮?
int b = 20;
const int& rb = b;
// 編譯報錯:error C3892: “rb”: 不能給常量賦值
//rb++;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a = 10;
const int& ra = 30;
// 編譯報錯: “初始化”: ?法從“int”轉(zhuǎn)換為“int &”
// int& rb = a * 3;
const int& rb = a*3;
double d = 12.34;
// 編譯報錯:“初始化”: ?法從“double”轉(zhuǎn)換為“int &”
// int& rd = d;
const int& rd = d;
return 0;
}

#include <iostream>
using namespace std;void print(const int& x) {cout << x << endl;// x = 5; // 錯誤:不能通過 const 引用修改對象
}int main() {int a = 10;const int& ref = a; // 創(chuàng)建一個對 a 的 const 引用// ref = 20; // 錯誤:不能通過 const 引用修改對象print(a); // 正確:傳遞 intprint(20); // 正確:傳遞字面量,通過 const 引用允許return 0;
}

注釋前的錯誤:

c0263619b1d34b908ea737dbd566f98b.png

正確運行結(jié)果:

dd74ed8c39d14563875c87faf1f56ec2.png

注意事項

  • 一旦?const?引用被初始化,它就不能再引用其他對象。
  • const?引用不能引用非?const?對象的地址,如果需要引用非?const?對象,必須顯式地聲明非?const?引用。

總之,const?引用在 C++ 中是一種非常有用的特性,它不僅提供了對數(shù)據(jù)的保護,還增加了代碼的靈活性和安全性。

4.指針和引用的關(guān)系

C++中指針和引用就像兩個性格迥異的親兄弟,指針是哥哥,引用是弟弟,在實踐中他們相輔相成,能有重疊性,但是各有自己的特點,互相不可替代。
? 語法概念上引用是一個變量的取別名不開空間,指針是存儲一個變量地址,要開空間。
? 引用在定義時必須初始化,指針建議初始化,但是語法上不是必須的。
? 引用在初始化時引用一個對象后,就不能再引用其他對象;而指針可以在不斷地改變指向?qū)ο蟆?/strong>
? 引用可以直接訪問指向?qū)ο?#xff0c;指針需要解引用才是訪問指向?qū)ο蟆?/strong>
? sizeof中含義不同,引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32位平臺下占4個字節(jié),64位下是8byte)
? 指針很容易出現(xiàn)空指針和野指針的問題,引用很少出現(xiàn),引用使用起來相對更安全一些。

結(jié)束語

本篇博客也就到此結(jié)束啦,C++ 的入門也差不多了,下個階段我們將步入類和對象的學習!!!
最后支持小編的友友和大佬們點個贊吧,也歡迎大家在評論區(qū)多多交流,感謝大家的支持!!!

http://www.risenshineclean.com/news/22770.html

相關(guān)文章:

  • 網(wǎng)站開發(fā)框架圖欽州seo
  • 哪有做網(wǎng)站的 優(yōu)幫云seo超級外鏈發(fā)布
  • 西寧網(wǎng)站制作哪家公司好網(wǎng)站設(shè)計模板網(wǎng)站
  • 韶關(guān)網(wǎng)站建設(shè)廣告聯(lián)盟平臺掛機賺錢
  • 采購網(wǎng)站平臺遼陽網(wǎng)站seo
  • 建站行業(yè)現(xiàn)狀探討今日頭條權(quán)重查詢
  • 網(wǎng)站搭建費用明細樂天seo培訓(xùn)
  • 蒙山縣網(wǎng)站建設(shè)鞍山seo外包
  • 個人證書查詢網(wǎng)全國聯(lián)網(wǎng)南寧seo優(yōu)化公司排名
  • 網(wǎng)站設(shè)計主要包含3個方面市場調(diào)研報告萬能模板
  • 如何做網(wǎng)站拉動條黑帽seo是什么
  • 網(wǎng)頁設(shè)計怎樣設(shè)置圖片大小公司seo排名優(yōu)化
  • 網(wǎng)站建設(shè)開發(fā)軟件有哪些關(guān)鍵詞推廣優(yōu)化排名品牌
  • asp 網(wǎng)站開發(fā) 軟件怎么做網(wǎng)絡(luò)平臺
  • 如何做好網(wǎng)站管理工作深圳網(wǎng)絡(luò)推廣代運營
  • 即墨城鄉(xiāng)建設(shè)局網(wǎng)站2345瀏覽器官網(wǎng)
  • 如何找做網(wǎng)站的公司網(wǎng)絡(luò)廣告的形式
  • 網(wǎng)站充值 下模板aso排名優(yōu)化
  • 天津建設(shè)工程新希望seo權(quán)重是什么意思
  • 外貿(mào)公司的網(wǎng)站建設(shè)模板下載百度競價廣告怎么收費
  • 網(wǎng)站icp備案地網(wǎng)絡(luò)廣告有哪些形式
  • 鄭州網(wǎng)絡(luò)優(yōu)化實力樂云seo百度seo快速排名優(yōu)化軟件
  • 長沙部分風險區(qū)域調(diào)整廈門seo
  • 新網(wǎng)站如何被快速收錄域名注冊萬網(wǎng)
  • 長沙網(wǎng)站托管公司排名商品推廣與營銷的方式
  • 怎么做網(wǎng)站熱線電話上海今天最新發(fā)布會
  • 河南濮陽建設(shè)局網(wǎng)站優(yōu)化seo設(shè)置
  • 做網(wǎng)站注意哪些方面如何做廣告宣傳與推廣
  • 做問卷賺錢最好似網(wǎng)站深圳關(guān)鍵詞優(yōu)化
  • 成都的網(wǎng)站建設(shè)開發(fā)公司云南seo