中國建設(shè)銀行重慶網(wǎng)站首頁網(wǎng)絡(luò)營銷策略實施的步驟
前言:
??C++是在C語言的基礎(chǔ)上不斷添加東西形成的一門語言,在C語言的基礎(chǔ)上引入了面向?qū)ο蟮乃枷搿R虼薈++既是面向?qū)ο蟮恼Z言,也是面向過程的語言。因為C++是以C語言為基礎(chǔ)的,所以基本上C++兼容所有的C語言。目前最常用的版本是C++98和C++11這兩個版本。
??因為C語言是一個比較早期的語言,在許多方面是存在缺陷的,所以C++在C語言的基礎(chǔ)上加了許多東西,比如:命名空間、缺省參數(shù)、函數(shù)重載、引用、模板等。另外需要知道的一個概念是,語言的更新只能向前兼容,之前存在的東西有缺陷,只能通過打補丁來解決,而不能從根本上去解決問題。因為有可能這一缺陷已經(jīng)被使用在了項目工程之中,如果改掉就會導致項目工程出現(xiàn)一些難以預(yù)料的BUG。
命名空間:
什么是命名空間?為什么要設(shè)置一個命名空間?
??變量、函數(shù)和類的名稱都存在于全局作用域中,在一個大一點的項目中,這些名稱就可能會存在沖突。命名空間的存在就是為了解決這一問題。命名空間可以對標識符的名稱進行本地化,從而達到避免命名沖突或名字污染的情況。命名空間的關(guān)鍵字是namesapce。
??命名空間相當于定義了一個新的作用域,命名空間內(nèi)的所有內(nèi)容都局限在該命名空間中。但是命名空間并不影響內(nèi)容的聲明周期。
命名空間的定義:
namespace NS
{// 命名空間中可以定義變量/函數(shù)/類型int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}
//命名空間可以嵌套
namespace N1
{int a;int b;int Add(int left, int right){return left + right;}namespace N2{int c;int d;int Sub(int left, int right){return left - right;}}
}
//同一個工程中允許存在很多個相同名稱的命名空間,編譯器最后會合成到同一個命名空間中
namespace N1
{int Mul(int left, int right){return left * right;}
}
命名空間的使用:
namespace use1
{int a = 1;int b = 2;
}
namespace use2
{int c = 3;
}
//使用using將命名空間中某個成員引入
using use1::b;
//使用using namespace 命名空間名稱 引入
using namespace use2;
int main()
{//命名空間名稱及作用域限定符printf("%d\n", use1::a);printf("%d\n", b);printf("%d\n", c);return 0;
}
C++的輸入輸出:
//std是C++標準庫的命名空間名,C++標準的定義實現(xiàn)都放在這個命名空間中
//前期學習可以直接將std引入
using namespace std;int main()
{cout << "hello world" << endl;int a;double b;char c;//C++可以自動識別變量的類型cin >> a;cin >> b >> c;cout << a << endl;cout << b << " " << c << endl;return 0;
}
??使用cout標準輸出對象(控制臺)和cin標準輸入對象(鍵盤)時,必須要包含頭文件以及按命名空間使用方法來使用std;
??cout和cin是全局的流對象,endl是特殊的C++符號,表示換行輸出,他們都包含在頭文件中;
??<<是流插入運算符,>>是流提取運算符;
??使用C++輸入輸出更方便,不需要像printf/scanf輸入輸出時那樣,需要手動控制格式。C++的輸入輸出可以自動識別變量類型;
??cout和cin分別是ostream和istream類型的對象,>>和<<也涉及到運算符的重載。
缺省參數(shù):
??缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值(默認值),在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。
#include <iostream>using namespace std;
//缺省參數(shù)不能在函數(shù)聲明和定義時,同時出現(xiàn)
// 缺省值必須是常量或全局變量
//全缺省參數(shù)
void Func(int a = 10, int b = 20, int c = 30)
{cout << a << " ";cout << b << " ";cout << c << endl;
}
//半缺省參數(shù)
//半缺省參數(shù)必須從右到左依次給出,不能有間隔
void Func1(int a, int b = 20, int c = 30)
{cout << a << " ";cout << b << " ";cout << c << endl;
}int main()
{Func();//缺省參數(shù)必須從左到右連續(xù)使用,不能出現(xiàn)形如Func(1, , 2)的寫法Func(1);Func(1, 2);Func(1, 2, 3);return 0;
}
函數(shù)重載:
什么是函數(shù)重載?
??C++允許在同一作用域中聲明幾個功能類似的同名函數(shù),這些同名函數(shù)的形參列表不同(參數(shù)個數(shù)或類型或類型順序),常用來處理實現(xiàn)功能類似數(shù)據(jù)類型不同的問題。
#include <iostream>
using namespace std;
//參數(shù)類型不同
int Add(int left, int right)
{return left + right;
}
double Add(double left, double right)
{return left + right;
}
//參數(shù)個數(shù)不同
int Sub(int max, int min)
{return max - min;
}
int Sub(int max, int min1, int min2)
{return max - min1 - min2;
}
//類型順序不同
void func(char a, int b)
{cout << a << " " << b << endl;
}
void func(int a, char b)
{cout << a << " " << b << endl;
}
int main()
{cout << Add(1, 2) << endl;cout << Add(1.1, 1.2) << endl;cout << Sub(10, 1) << endl;cout << Sub(10, 1, 2) << endl;func('a', 3);func(5, 'b');return 0;
}
為什么C++能識別重載函數(shù),而C語言不行?
??因為C語言編譯之后的結(jié)果,函數(shù)名并沒有修飾,我們在代碼中寫的什么樣就是什么樣。但是C++的函數(shù)名是按照一定規(guī)則被修飾了的,不同的編譯器在不同的環(huán)境中修飾規(guī)則也是有區(qū)別的,所以C++能識別重載函數(shù),而C語言不能。
??如果兩個函數(shù)的函數(shù)名和參數(shù)是一樣的,返回值不同,是不能夠構(gòu)成重載的,因為調(diào)用時編譯器沒法區(qū)分。