跟我一起學習C++ 之 初識C++

lhb_immortal發表於2014-06-26

宣告
            本人自學C++, 沒有計算機基礎,在學習的過程難免會出現理解錯誤,出現風馬牛不相及的現象,甚至有可能會貽笑大方。 如果有幸C++大牛能夠掃到本人的部落格,誠心希望大牛能給予批評與指正!不勝感激!
            學習的過程分為初識、入門、進階三個階段。
            因為對C++沒有什麼瞭解,自己的學習設定可能也有失準確性。望兄弟們多指點。謝謝!


我不是一個計算機專業畢業的學生。可是畢業後各種機緣巧合,我走上了IT這條路。工作中,越來越多的發現自己知識的不足。於是很早以前就給自己定了計劃, 要學習C++。要會開發 。不會開發的DBA,不是一個好的DBA哈哈,我一直堅信這句話。其實吧, 一開始的時候,我說的開發指的是Oracle 開發 ,至於這裡嘛,直接拿來套用下,哈哈。來,哥們兒姐們兒們,有想學C++開發 的,來跟哥一起開始這條不歸路吧。哈哈。。。。。以前都覺得自己還小,現在一說話就是哥~,哎真的老了啊。。。

在開始以前呢,先說入門C++要看哪本書吧。首先要推選的必然是“The C++ programming language”,這是C++之父B.S 的作品,絕對的權威,所謂知子莫若父嘛。哈哈。第二本,經過時間的淘沙,經過廣大人民群眾雪亮的眼睛的挑剔,最終留下這麼一本:“C++ Primer”,絕對的經典,入門的好書。我目前的學習,就是通過看這本書結合視訊來學習C++的,當然我不是名人,也沒什麼權威。從哪本書開始學,完全 看自己的,如果你覺得有其他更好的,也歡迎來跟我交流下,讓我也一暏為快哈。
              
那麼開始吧!

首先,初識C++時,直接來一些理論麼?什麼叫函式?什麼叫名稱空間?什麼叫指標? 我不這樣想,我覺得例項+理論結合起來理解,最容易接受。如果一上來就直抒胸臆,侃侃而談這些理論,估計我寫不完就睡死過去了~

來吧,我們直接開始 了。

一、 最簡單的C++程式

來揭開C++神祕的面紗,先來一個最簡單的C++程式,也是學任何一門開發語言,開門見山要寫的一個東西:Hello world!

先來看看C++ 原始碼:

點選(此處)摺疊或開啟

  1. #include <iostream>
  2. int main()
  3. {
  4. std::cout<<"Hello world!"<<std::endl;
  5. }
再來看看我這個程式碼編譯完成後,執行會有什麼。可是怎麼編譯呢?
我們要知道C++原始碼,是人使用的程式碼,並不是機器可以直接使用的程式碼。你問我機器直接使用的程式碼是啥 ? 哦,好好回想下,發現那是好遙遠的東西啊。。。是“1 0 ”這兩個數字。。。嘿嘿,也就是二進位制了。這裡不討論二進位制這麼複雜的東東哈
那麼我們如何把我們人使用的程式碼轉化成機器可以識別的程式碼呢?G++閃亮登場~哈哈。
g++是C++的編譯工具。如果你學習C語言,那麼你肯定很熟悉GCC,他們 都是編譯器,可以將人能讀懂的程式碼轉換成機器能讀懂的程式碼。用法也是一樣的。
最常用的使用方法 就是g++ '原始碼檔案' -o '輸出檔案'
如果上面只使用g++ '原始碼檔案' 也是沒問題的,會生成一個預設檔案:a.out

編譯:
halberd:/home/C++ # g++ ./hello.cpp       
linux-emf1:/home/C++ # g++ ./hello.cpp -o hello
halberd:/home/C++ # ls -la
-rw-r--r-- 1 root root 1782257 Jun 11 16:49 C++ Primer.4th.chm
-rw-r--r-- 1 root root     242 Jun 22 03:14 test.cpp
-rw-r--r-- 1 root root   13304 Jun 23 07:53 C++學習筆記
-rw-r--r-- 1 root root      93 Jun 23 21:23 hello.cpp
-rwxr-xr-x 1 root root   13154 Jun 23 21:23 a.out
-rwxr-xr-x 1 root root   13154 Jun 23 21:24 hello                       

  • 這裡要注意啊,C++的編譯器是G++,而C的編譯器是GCC,別弄錯了,不然你會發現,明明程式碼寫對了,但是編譯就是報錯

執行:
halberd:/home/C++ # ./a.out
Hello world!
linux-emf1:/home/C++ # ./hello
Hello world!
linux-emf1:/home/C++ #

正常執行了, 哈哈。說明這個最簡單的C++原始碼,還是正確的。太神奇了~

嘿嘿,我突發奇想,想看看a.out 裡面到底是啥東西,為啥要經過g++編譯就會生成這樣一個檔案呢?
linux-emf1:/home/C++ # strings a.out
/lib64/ld-linux-x86-64.so.2
libstdc++.so.6
__gmon_start__
_Jv_RegisterClasses
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
_ZNSt8ios_base4InitD1Ev
_ZSt4cout
_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
_ZNSolsEPFRSoS_E
_ZNSt8ios_base4InitC1Ev
libm.so.6
libgcc_s.so.1
libc.so.6
__cxa_atexit
__libc_start_main
GLIBC_2.2.5
GLIBCXX_3.4
UH-h
UH-h
[]A\A]A^A_
Hello world!
;*3$"

XX,除了“Hello world!” 其他全不認識。。。。我瞬間放棄了。。。。。。



二、 C++程式的最基本組成結構

其實學過開發的人都知道,"hello wold" 程式要正常執行,首先原始碼中必然包含一種語言程式碼正常執行的必要元件,或者說結構是完整的。而“Hello world”在所有語言中關鍵點都只是呼叫了該語言的輸出函式
那麼C++程式的原始碼正常執行,必需有哪些結構組成呢?

點選(此處)摺疊或開啟

  1. #include <iostream>                      /*這一行,是在呼叫C++的標頭檔案,include 也就是包含的意思,也就是說,C++程式的執行必需包含至少一個標頭檔案才可以正常執行。至於什麼是標頭檔案,標頭檔案的作用等等,你別想太多,我腦子慢跟不上 你,一會兒我們                                           再學習。*/
  2. int main()                               /*這一行 有個int ,這個是幹嘛的?先在這裡簡單說一下,int 是C++的一個內建資料型別--整型,小心啊,不是整形~我們不學棒子~ int 後面跟一個main(),如果你學過一種程式語言,哪怕 只是個shell ,看到                                             main後面的小()還有下面的{},應該意識到,這 是一個函式了吧?,嘿嘿。關於main函式,是C++執行必要的一個組成部分,每個 C++程式中必然包含main函式。*/
  3. {                                        //函式體開始
  4. std::cout<<"Hello world!"<<std::endl;  /*這一行是hello world 的關鍵所在 ,呼叫名稱空間的cout,將\"Hello world!\"輸出到遮蔽。沒接觸過C++的是不是又迷茫了,啥叫名稱空間啊?哈哈我好有成就感,後面的學習過程中會詳細介紹。這裡只是說下                                            名稱空間就像 一個工具箱,工具箱裡有你幹活所需要的工具。cout 就是一個工具,一個輸出工具。*/
  5. }                                        //函式體結束
這就是整個hello world 原始碼的內容了。
那麼通過上面的說明,你找到了幾個C++原始碼正常編譯所必須的結構呢?
我找到了2個,一個是Include 部分引用了標頭檔案,另一個是main函式。

三、思考
對於C++原始碼的構成你瞭解了沒?哈哈是不是覺得很簡單,簡單的5行程式碼,兩個部分就寫出一個C++程式。

嘿嘿,我要黑心的打擊你一下了,別高興太早,你真正瞭解了麼?我們來一起思考幾個問題啊:
1. #inlude 的作用是什麼呢?'<>' 這兩個符號是幹嘛呢?有沒有其他符號可以替代呢?如果有,不同符號代表的意義有什麼區別呢?被'<>'引用起來的內容又是個什麼東西呢?我們對它又瞭解多少呢?
2. int 是C++語言中的一個內建函式--整型。那C++內建函式有多少種呢?常用的有哪些呢?不同的內建函式又有什麼用途呢?
3. std 是什麼?有什麼作用呢?'::' 這兩個冒號連在一起是啥意思呢?cout又有什麼作用呢?'< 本來還想問幾個問題呢,我自己都怕了, 因為真的啥都不知道。。。555555.。。。
不過沒關係,過不了幾天我就會都知道了,過幾天你也來回答我吧。嘿嘿
沒事的時候自己寫點東西,熟悉下,開發語言,必須要每天寫東西,不然就都忘記了。。。。

我們別寫hello world了,我們定情個I LOVE YOU 吧,哈哈。以後,學會了編寫windows程式,可以把表白的話寫成一個小程式,然後發給自己中意的女孩兒。。。。是不是很屌絲啊。。。哈哈

 四、回顧
我們通過今天的學習呢,都學到了哪些東西呢?
1. C++最簡單原始碼的組成部分
2. 如何編譯C++原始碼檔案為作業系統可執行檔案(g++)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25313300/viewspace-1195265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章