C++学习笔记第二天:几个知识点
第一天,囫圇吞棗的把C++的基本概念擼了一遍
有幾個(gè)地方不太理解,今天有針對(duì)性的學(xué)習(xí)一下
?
1、namespace
自定義命名空間,主要為了解決類、函數(shù)和全局變量的命名沖突問(wèn)題。
調(diào)用某個(gè)命名空間里的符號(hào)時(shí),需要使用格式:命名空間::符號(hào)名稱
#include <iostream> using namespace std; namespace first {int var = 5; }namespace second {double var = 3.1416; }int main () {cout << first::var << endl;cout << second::var << endl;return 0; }結(jié)果是
5
3.1416
兩個(gè)全局變量都是名字都是var,但是他們不在同一個(gè)namespace中所以沒(méi)有沖突。
關(guān)鍵字using可以幫助從namespace中引入名字到當(dāng)前的聲明區(qū)域
#include <iostream> using namespace std;namespace first {int x = 5;int y = 10; }namespace second {double x = 3.1416;double y = 2.7183; }int main () {using first::x;using second::y;cout << x << endl;cout << y << endl;cout << first::y << endl;cout << second::x << endl;return 0; }輸出是
5
2.7183
10
3.1416
就如我們所指定的第一個(gè)x是first::x,y是second.y
?
namespace也支持嵌套
需要注意的時(shí),盡量不要在頭文件中使用using namespace,因?yàn)轭^文件的引用具有不確定性,因此一旦在頭文件中整體using了某個(gè)namespace,那么有可能會(huì)造成名稱污染。
總而言之,using namespace 應(yīng)盡可能的限制在小范圍的作用域內(nèi)。
?
2、頭文件與源文件
頭文件的后綴:.h,不需要編譯,主要用于變量和函數(shù)的聲明,而不必完成具體的實(shí)現(xiàn),起到一個(gè)接口的作用。
源文件的后綴:.cpp,需要進(jìn)行編譯,主要存放函數(shù)的具體實(shí)現(xiàn)。
我的理解是:
在C++中,任何的符號(hào)(函數(shù)或者變量)都需要事先聲明之后才可以調(diào)用。
假設(shè)有兩個(gè)cpp源文件A和B,在A中定義了函數(shù)AFun,那如果B中需要調(diào)用這個(gè)AFun的話,也需要用同樣的格式進(jìn)行聲明,然后才可以調(diào)用到AFun。
如果這個(gè)AFun是一個(gè)使用率很高的函數(shù),或者A中還有很多類似的函數(shù),那么所有需要這些函數(shù)的源文件都要被迫進(jìn)行一系列的聲明
頭文件就是解決這個(gè)問(wèn)題的,將A中所有使用率比較高的函數(shù)聲明編寫成一個(gè)獨(dú)立的頭文件,那其他源文件只需include這個(gè)頭文件即可,無(wú)需將里面的函數(shù)再聲明一遍。
值得注意的是,如果在頭文件中聲明變量,應(yīng)該加上 extern 前綴,否則如果有兩個(gè)以上的源文件引用這個(gè)頭文件時(shí),會(huì)提示編譯錯(cuò)誤。
有一篇文章說(shuō)的非常好,鏈接在此:http://blog.csdn.net/chillon_liao/article/details/44261921
?
3、extern
extern 存儲(chǔ)類用于提供一個(gè)全局變量的引用,全局變量對(duì)所有的程序文件都是可見(jiàn)的。當(dāng)您使用 'extern' 時(shí),對(duì)于無(wú)法初始化的變量,會(huì)把變量名指向一個(gè)之前定義過(guò)的存儲(chǔ)位置。
當(dāng)您有多個(gè)文件且定義了一個(gè)可以在其他文件中使用的全局變量或函數(shù)時(shí),可以在其他文件中使用 extern 來(lái)得到已定義的變量或函數(shù)的引用。可以這么理解,extern 是用來(lái)在另一個(gè)文件中聲明一個(gè)全局變量或函數(shù)。
extern 修飾符通常用于當(dāng)有兩個(gè)或多個(gè)文件共享相同的全局變量或函數(shù)的時(shí)候
第一個(gè)文件:main.cpp
#include <iostream>int count ; extern void write_extern();int main() {count = 5;write_extern(); }第二個(gè)文件:support.cpp
#include <iostream>extern int count;void write_extern(void) {std::cout << "Count is " << count << std::endl; }最后輸出:
Count is 5
?
寵辱不驚,看庭前花開(kāi)花落;去留無(wú)意,望天上云卷云舒
總結(jié)
以上是生活随笔為你收集整理的C++学习笔记第二天:几个知识点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [PHP] PHP与Apache的模块配
- 下一篇: C++学习之路(六):实现一个Strin