C++入門基礎(chǔ)之命名空間、輸入輸出和缺省參數(shù)
一.命名空間
在C/C++中,變量、函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存
在于全局作用域中,可能會導(dǎo)致很多沖突。使用命名空間的目的是對標(biāo)識符的名稱進行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題的。
例如:
#include<stdio.h> int rand = 10; int main() { int a = 10; return 0; }
這時候代碼沒有任何問題。
#include<stdio.h> #include<stdlib.h> int rand = 10; int main() { int a = 10; return 0; }
出現(xiàn)這個問題,我們知道,在頭文件<stdlib.h>里面有一個函數(shù)rand(),所以頭文件展開后就會出現(xiàn)定義沖突的現(xiàn)象。在C++中為了避免這種,利用命名空間。
(1)命名空間的定義
定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對{}即可,{}
中即為命名空間的成員。
#include<stdio.h> namespace ytt { int a = 5; } int a = 10; int main() { printf("%d", a); return 0; }
這樣就不會有定義沖突的問題了,那如果我們想訪問,值為5的那個變量a,又要怎么辦呢?
(2)命名空間的使用
如果直接訪問是訪問不到的。
1.訪問方法
命名空間的名稱 + :: + 命名空間內(nèi)的變量或者函數(shù)。
namespace ytt { int a = 5; int Add(int a, int b) { return a + b; } } int main() { printf("a=%d\n", ytt::a); printf("4+5=%d\n", ytt::Add(4 , 5)); return 0; }
2.命名空間的嵌套
namespace ytt { int Add(int a, int b) { return a + b; } namespace wq { int Max(int a, int b) { return a > b ? a : b; } } } int main() { printf("Max=%d\n", ytt::wq::Max(10, 15)); return 0; }
嵌套的情況下,就是一層一層訪問:
(3)全局域
訪問全局域,只需要 :: + 全局變量
namespace ytt { int a = 10; } int a = 5; int main() { int a = 1; //局部a printf("a=%d\n", a); //全局a printf("a=%d\n", ytt::a); //命名空間內(nèi)的a printf("a=%d\n", ::a); return 0; }
二.輸入&&輸出
C++的輸入輸出是函數(shù):cin,cout,被包含在頭文件 <iostream> 中。
(1) cout
#include<iostream> int main() { std::cout << "hello world" << std:: endl; std::cout << "hello world\n"; return 0; }
<<是流插入運算符
有了前面,命名空間的學(xué)習(xí),我們也就能看出來了,cout 也是被封裝到命名空間 std里面的,endl 是封裝在 std 里面的換行符,和 ' \n '是一樣的。
(2)cin
#include<iostream> int main() { int a = 0; std::cin >> a; std::cout << "a = " << a; return 0; }
>>是流提取運算符,cin 也是被封裝到命名空間 std里面的。
實際上cout和cin分別是 ostream 和 istream 類型的對象,>>和<<也涉及運算符重載等知識,這些知識我們我們后續(xù)才會學(xué)習(xí),所以我們這里只是簡單學(xué)習(xí)他們的使用。后面我們還有有一個章節(jié)更深入的學(xué)習(xí)IO流用法及原理。
(3)cin cout自動是識別類型
cin cout 相對于 C語言的scnaf printf,少了類型的修飾,所以在C++中,cin 和 cout是可以自動識別類型的。
int main() { int a = 0; double b = 0; char c = 0; std::cin >> a >> b >> c; std::cout << a <<std::endl; std::cout << b << std::endl; std::cout << c << std::endl; return 0; }
三.命名空間的展開
(1)使用using namespace 命名空間名稱引入
我們在寫程序的時候,有時候會發(fā)生,某個命名空間的變量名,函數(shù)名,經(jīng)常被使用,我們每一次使用都要加上命名空間,會非常麻煩。所以我們使用using namespace 命名空間名稱引入。
#include<iostream> namespace ytt { int a = 0; int b = 2; } using namespace ytt; using namespace std; int main() { cout << a << endl; cout << b << endl; return 0; }
這樣使用就是將命名空間的所有定義全部展開,這樣雖然使得我們不用每次都去包含命名空間,到那時也使得我們辛辛苦苦建立的命名空間也就沒有了意義。因為都在這里展開了,就會發(fā)生定義相同的沖突。所以這種使用方法在企業(yè)開發(fā)時禁止的,我們平時練習(xí)代碼時,為了方便可以使用。
(2)使用using將命名空間中某個成員引入
上述使用使用using namespace 將整個命名空間展開,會有造成沖突的可能,我們還可以將命名空間的某一成員引入。
#include<iostream> namespace ytt { int a = 0; int b = 2; } using ytt::a; using ytt::b; using std::cout; using std::endl; int main() { cout << a << endl; cout << b << endl; return 0; }
四.缺省參數(shù)
(1)缺省參數(shù)概念
缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參。
#include<iostream> using std::cout; using std::endl; void fun(int a = 10) { cout << a << endl; } int main() { fun(); //沒傳參數(shù),使用缺省參數(shù) fun(100);//傳了參數(shù),就使用傳的參數(shù) return 0; }
(2)缺省參數(shù)分類
1.全缺省參數(shù)
void Func(int a = 10, int b = 20, int c = 30) { cout<<"a = "<<a<<endl; cout<<"b = "<<b<<endl; cout<<"c = "<<c<<endl; }
調(diào)用時:
void Func(int a = 10, int b = 20, int c = 30) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; } int main() { Func(); //true Func(1); //true Func(1, 2); //true Func(1, 2, 3); //true Func(, 1, 2); //error Func(1, , 3); //error return 0; }
帶有缺省參數(shù)的函數(shù),傳參數(shù)時必須從左往右連續(xù),不能跳著給參數(shù)。
2.半缺省參數(shù)
void Func(int a, int b = 10, int c = 20) { cout<<"a = "<<a<<endl; cout<<"b = "<<b<<endl; cout<<"c = "<<c<<endl; }
3.注意:
1. 半缺省參數(shù)必須從右往左依次來給出,不能間隔著給
2. 缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn)
#include<iostream> using std::cout; using std::endl; //函數(shù)聲明 void Func(int a = 10, int b = 20, int c = 30); int main() { Func(); //true return 0; } //函數(shù)定義 void Func(int a = 10, int b = 20, int c = 30) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; }
3. 缺省值必須是常量或者全局變量
五.最后
到此這篇關(guān)于C++入門基礎(chǔ)之命名空間、輸入輸出和缺省參數(shù)的文章就介紹到這了,更多相關(guān)C++命名空間、輸入輸出和缺省參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++動態(tài)規(guī)劃算法實現(xiàn)矩陣鏈乘法
動態(tài)規(guī)劃算法通常用于求解具有某種最優(yōu)性質(zhì)的問題。在這類問題中,可能會有許多可行解。每一個解都對應(yīng)于一個值,我們希望找到具有最優(yōu)值的解2022-06-06Qt串口通信開發(fā)之Qt串口通信模塊QSerialPort開發(fā)完整實例(串口助手開發(fā))
這篇文章主要介紹了Qt串口通信開發(fā)之Qt串口通信模塊QSerialPort開發(fā)完整實例(串口助手開發(fā)),需要的朋友可以參考下2020-03-03C++消息隊列(定義,結(jié)構(gòu),如何創(chuàng)建,發(fā)送與接收)
這篇文章主要介紹了C++消息隊列(定義,結(jié)構(gòu),如何創(chuàng)建,發(fā)送與接收),消息隊列是一種先進先出的隊列型數(shù)據(jù)結(jié)構(gòu),實際上是系統(tǒng)內(nèi)核中的一個內(nèi)部鏈表2022-08-08C/C++實現(xiàn)枚舉網(wǎng)上鄰居信息的示例詳解
在Windows系統(tǒng)中,通過網(wǎng)絡(luò)鄰居可以方便地查看本地網(wǎng)絡(luò)中的共享資源和計算機,本文將介紹一個簡單的C++程序,使用Windows API枚舉網(wǎng)絡(luò)鄰居信息,并獲取對端名稱、本機名稱、主機名稱以及主機IP等信息,文中通過代碼示例給大家講解非詳細(xì),需要的朋友可以參考下2023-12-12MFC串口通信發(fā)送16進制數(shù)據(jù)的方法
這篇文章主要為大家詳細(xì)介紹了MFC串口通信發(fā)送16進制數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01基于C++ list中erase與remove函數(shù)的使用詳解
本篇文章是對C++ list中erase與remove函數(shù)的使用進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05