電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
[C++][2]C++入門
前往頁面 1, 2  下一頁
 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2007-5-3, PM 9:33 星期四    文章主題: [C++][2]C++入門 引言回覆

在各大程式設計討論區,總是有個每隔一段時間就會跑出來的回鍋問題,而且每個人的答案也總是不一樣,那就是:

先學C好?還是先學C++好?

很多人會說先學C比較好,比較直觀,一道命令一道命令地下,可以比較容易了解程式的流程,而且不用接觸類別的觀念,不會搞迷糊。

也有人說先學C++比較好,理由不外乎就是最終還是要學C++,C裡面有些函數都過時了,不太會用到了,或者是習慣C的方式後,要改學類別會有障礙。

總之,兩方都有道理,雖然我是先學C的,但我覺得直接學C++是比較好的,反正現在都是C++的compiler了,而且也沒人規定學C++一定要先學類別,再說了,語言是一天一天進步快速的,現在還去學C的舊函式,未免也太沒有效率了一點,另外,說實在的,我還真有點搞不懂C跟C++的分界線在哪,那麼C++作為一個完整且較先進的程式語言來看,沒什麼理由要先學了C再學C++。

因此我的教學文章會直接以C++為主,或許偶而會摻到些C的內容,不過我大概也不知道,反正用C的語法寫的東西,C++ compiler也是照單全收,因此用了就用了吧。

上面廢話一大堆,現在直接來看一段C++的程式碼,如下:
代碼:

1  #include <iostream>
2
3  int main()
4  {
5      std::cout << "這行字會出現在cmd中" << std::endl;
6      system( "pause" );
7
8      return 0;
9  }


上面左邊的1~9數字是行數,為了方便說明才打上去的,實際上在寫程式時要去掉。將上面的程式存成.cpp檔,就是一個不折不扣的原始碼了。

我們先看第1行,#include是一個前置處理器指令,它的意思就是告訴compiler,在編譯這個.cpp檔之前,先把iostream.h裡面的程式碼貼在這個cpp檔的開頭,以這個方式,我們可以讓曾寫過的程式碼拿來再利用,而不用重複在每個cpp檔中寫下一樣的大量程式碼。

之所以第1行裡寫的是<iostream>而不是<iostream.h>,是因為這是標準C++的標頭檔,使用了<iostream>的話,前置處理器便會在預設的目錄中找尋此一標頭檔,但如果加了.h,則我們必須自行指定此一.h檔放在哪個目錄之下。

另外,如果是include自行編寫的標頭檔,假設是myfile.h,那麼應該使用"myfile.h"來註明,<>這個符號是拿來包住標準標頭檔用的。

include如果查字典,是包括、包含的意思,也就是要把標頭檔的內容包含進來,而標頭檔,也就是.h檔,或叫做header檔,大致來說,可以說成是cpp檔的一個目錄,它會宣告與其對應的cpp檔中有些什麼功能,因此將其包含進來,就可以使用另一個cpp檔中已編程好的內容。

再說到第3行,int main(),int是integer也就是整數的意思,main是C++最重要的主函式,任何一個程式都是從main()開始執行的,main的中文意思是「主要的、重要的」,底下第4行跟第9行,分別以兩個相對大括號{}將其中的內容包起來,這個內容,就是main()函式中你所下的指令了。而main前的這個int,是代表main函式的回傳值。

程式設計中所謂的函式,跟國中數學所學的函式是一樣的意思,像是f(x) = 3x + 1,假設以x = 2代入,我們可以很容易得到f(2) = 7這個值,其中f就是這個函式的名字,3x + 1就是函式的內容指令,而7就是這個函式傳入2時的回傳值,寫成程式,大致如下:
代碼:

int f( int x )
{
   return 3*x + 1;
}

應該不會很難理解。f( int x )中的int x就是這個函數的參數,也就是我們傳進去的值,int代表我們只能傳整數進去,如果想傳像3.2這種小數進去,在後面會有講解,目前先不提,而return是代表回傳,因此把x = 2丟進這個函式,會回傳3*x + 1也就是7回來。

而我們可以看到,範例中第3行跟第8行,分別是int main()跟return 0;,這就代表有個函式叫做main,它會被期待回傳一個整數,而第8行也確實回傳了一個整數:0給它,在C++中,main回傳0代表程式執行無誤。

再來看第5行,std::cout這是一個標準輸出串流,當我們想輸入文字到cmd畫面時,這個物件就是最好用的東西了,只要如第5行一樣,在後面加上 << 就可以將其後雙括號" "內的文字輸出到畫面上,而std::endl則代表換行的意思。

最後是第6行的system( "pause" );,這是代表我們要向system,也就是cmd發出一個pause指令,pause就是暫停的意思,也就是說,這行就是我們叫cmd先不要自動關閉,先暫停一下,這樣我們才能檢示cmd畫面上出現的「這行字會出現在cmd中」。

在C++中,任何一行指令的後頭必須加上個分號「;」,來代表此一指令之完結,如果不加分號,就代表你一行指令還沒打完,compiler會自動往下查詢直到第一個分號出現才當成是一個完整的指令,也就是說,如果將system( "pause" );改成如下面這樣也是可以的:
代碼:

system
(
"pause"
)
;

但改成
代碼:

s
ys
tem
( "pause" )
;

可就不行囉,每個單字還是要有它的完整性的。

另外,在C++中,是大小寫相異的(case sensitive),也就是說大寫S跟小寫s,是當成不同字看待的,所以要是把system改成了SYSTEM或System,那可就會無法編譯囉。
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
玄穹
稍嫌羞澀的路人


註冊時間: 2008-05-26
文章: 2

0.00 果凍幣

發表發表於: 2008-5-26, PM 10:22 星期一    文章主題: 引言回覆

大大教的全都是C++的麼 可以用C的程式去編輯麼 我是新手請多多包含
回頂端
檢視會員個人資料 發送私人訊息
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2008-5-27, AM 1:10 星期二    文章主題: 引言回覆

玄穹 寫到:
大大教的全都是C++的麼 可以用C的程式去編輯麼 我是新手請多多包含

「編輯」的話可以
「編譯」的話不行
C++的編譯器可以編譯C的程式碼
但C的編譯器不能編譯C++的程式碼
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
雲渺
稍嫌羞澀的路人


註冊時間: 2008-05-29
文章: 1

0.00 果凍幣

發表發表於: 2008-5-29, PM 9:57 星期四    文章主題: 引言回覆

C#=c++ㄇ?? 如果不是可以給我c++的載點ㄇ
回頂端
檢視會員個人資料 發送私人訊息
lsk
喜歡上這裡的冒險者


註冊時間: 2007-06-20
文章: 93

20.59 果凍幣

發表發表於: 2008-5-30, AM 5:12 星期五    文章主題: 引言回覆

雲渺 寫到:
C#=c++ㄇ?? 如果不是可以給我c++的載點ㄇ

不等於。

Visual C++ 2008在這邊有:
http://www.microsoft.com/express/vc/
回頂端
檢視會員個人資料 發送私人訊息
ZXCV005003
稍嫌羞澀的路人


註冊時間: 2009-01-07
文章: 2

0.00 果凍幣

發表發表於: 2009-1-7, AM 3:49 星期三    文章主題: Re: [C++][2]C++入門 引言回覆

yag 寫到:
在各大程式設計討論區,總是有個每隔一段時間就會跑出來的回鍋問題,而且每個人的答案也總是不一樣,那就是:

先學C好?還是先學C++好?

很多人會說先學C比較好,比較直觀,一道命令一道命令地下,可以比較容易了解程式的流程,而且不用接觸類別的觀念,不會搞迷糊。

也有人說先學C++比較好,理由不外乎就是最終還是要學C++,C裡面有些函數都過時了,不太會用到了,或者是習慣C的方式後,要改學類別會有障礙。

總之,兩方都有道理,雖然我是先學C的,但我覺得直接學C++是比較好的,反正現在都是C++的compiler了,而且也沒人規定學C++一定要先學類別,再說了,語言是一天一天進步快速的,現在還去學C的舊函式,未免也太沒有效率了一點,另外,說實在的,我還真有點搞不懂C跟C++的分界線在哪,那麼C++作為一個完整且較先進的程式語言來看,沒什麼理由要先學了C再學C++。

因此我的教學文章會直接以C++為主,或許偶而會摻到些C的內容,不過我大概也不知道,反正用C的語法寫的東西,C++ compiler也是照單全收,因此用了就用了吧。

上面廢話一大堆,現在直接來看一段C++的程式碼,如下:
代碼:

1  #include <iostream>
2
3  int main()
4  {
5      std::cout << "這行字會出現在cmd中" << std::endl;
6      system( "pause" );
7
8      return 0;
9  }


上面左邊的1~9數字是行數,為了方便說明才打上去的,實際上在寫程式時要去掉。將上面的程式存成.cpp檔,就是一個不折不扣的原始碼了。

我們先看第1行,#include是一個前置處理器指令,它的意思就是告訴compiler,在編譯這個.cpp檔之前,先把iostream.h裡面的程式碼貼在這個cpp檔的開頭,以這個方式,我們可以讓曾寫過的程式碼拿來再利用,而不用重複在每個cpp檔中寫下一樣的大量程式碼。

之所以第1行裡寫的是<iostream>而不是<iostream.h>,是因為這是標準C++的標頭檔,使用了<iostream>的話,前置處理器便會在預設的目錄中找尋此一標頭檔,但如果加了.h,則我們必須自行指定此一.h檔放在哪個目錄之下。

另外,如果是include自行編寫的標頭檔,假設是myfile.h,那麼應該使用"myfile.h"來註明,<>這個符號是拿來包住標準標頭檔用的。

include如果查字典,是包括、包含的意思,也就是要把標頭檔的內容包含進來,而標頭檔,也就是.h檔,或叫做header檔,大致來說,可以說成是cpp檔的一個目錄,它會宣告與其對應的cpp檔中有些什麼功能,因此將其包含進來,就可以使用另一個cpp檔中已編程好的內容。

再說到第3行,int main(),int是integer也就是整數的意思,main是C++最重要的主函式,任何一個程式都是從main()開始執行的,main的中文意思是「主要的、重要的」,底下第4行跟第9行,分別以兩個相對大括號{}將其中的內容包起來,這個內容,就是main()函式中你所下的指令了。而main前的這個int,是代表main函式的回傳值。

程式設計中所謂的函式,跟國中數學所學的函式是一樣的意思,像是f(x) = 3x + 1,假設以x = 2代入,我們可以很容易得到f(2) = 7這個值,其中f就是這個函式的名字,3x + 1就是函式的內容指令,而7就是這個函式傳入2時的回傳值,寫成程式,大致如下:
代碼:

int f( int x )
{
   return 3*x + 1;
}

應該不會很難理解。f( int x )中的int x就是這個函數的參數,也就是我們傳進去的值,int代表我們只能傳整數進去,如果想傳像3.2這種小數進去,在後面會有講解,目前先不提,而return是代表回傳,因此把x = 2丟進這個函式,會回傳3*x + 1也就是7回來。

而我們可以看到,範例中第3行跟第8行,分別是int main()跟return 0;,這就代表有個函式叫做main,它會被期待回傳一個整數,而第8行也確實回傳了一個整數:0給它,在C++中,main回傳0代表程式執行無誤。

再來看第5行,std::cout這是一個標準輸出串流,當我們想輸入文字到cmd畫面時,這個物件就是最好用的東西了,只要如第5行一樣,在後面加上 << 就可以將其後雙括號" "內的文字輸出到畫面上,而std::endl則代表換行的意思。

最後是第6行的system( "pause" );,這是代表我們要向system,也就是cmd發出一個pause指令,pause就是暫停的意思,也就是說,這行就是我們叫cmd先不要自動關閉,先暫停一下,這樣我們才能檢示cmd畫面上出現的「這行字會出現在cmd中」。

在C++中,任何一行指令的後頭必須加上個分號「;」,來代表此一指令之完結,如果不加分號,就代表你一行指令還沒打完,compiler會自動往下查詢直到第一個分號出現才當成是一個完整的指令,也就是說,如果將system( "pause" );改成如下面這樣也是可以的:
代碼:

system
(
"pause"
)
;

但改成
代碼:

s
ys
tem
( "pause" )
;

可就不行囉,每個單字還是要有它的完整性的。

另外,在C++中,是大小寫相異的(case sensitive),也就是說大寫S跟小寫s,是當成不同字看待的,所以要是把system改成了SYSTEM或System,那可就會無法編譯囉。

請問這些是要照著您寫的原始碼然後自己練習
還是要怎麼才能學習
之前買了一本書
有字天書 嘆...
再請問一下完全不懂英文的學這學的起來嗎
還是比較難而已
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2009-1-7, AM 8:44 星期三    文章主題: Re: [C++][2]C++入門 引言回覆

ZXCV005003 寫到:
請問這些是要照著您寫的原始碼然後自己練習
還是要怎麼才能學習
之前買了一本書
有字天書 嘆...
再請問一下完全不懂英文的學這學的起來嗎
還是比較難而已

是的,學習的第一步就是模仿
請先把我這系列的文章從頭到尾出現過的完整程式碼(不完整的就不用了)都照順序自己打一遍並試著編譯看看
只要模仿的次數夠多,就能夠從中找到某些規律
找到了規律,你就會開始慢慢了解c++到底要怎麼寫了

即使完全不懂英文也是可以學會的
當然難度上會增加一些
但只要有恆心都是可以克服的
要是能夠同時把英文也學起來那是最好的
畢竟很多Windows或DirectX的函式的MSDN解說都是英文的型態
所以如果你學程式時英文沒有跟著同時進步
到越後期難度就會增加得越高喔(雖然會加高,但也不是完全沒辦法繼續學習的程度)

建議您文法方面姑且不論,盡可能把看過的單字意思了解,尤其重要的是要想辦法把發音唸出來(即使是錯誤的發音也可以)
因為記住了發音,你才會把它當成一整個字看待
像是stream,對於會唸的人來說,這就是一個字,對於不會唸的人來說,這就是六個字
記憶的難度就差了六倍(可能沒到這麼高,但真的差很多)
所以不論怎樣,想辦法把每個單字唸出來吧,奇摩字典查得到某些單字的發音,查不到的,就自己給它定個發音背下來,這樣學起來才會比較快
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2009-1-7, PM 10:19 星期三    文章主題: Re: [C++][2]C++入門 引言回覆

先從看的懂的開始學吧
光是中文文件就看不完了
英文算是滿基本的
英文慢慢來沒關係,重要的是不要逃避英文
不過英文好的人功力提升比較快
而且比較專業的文件,還是要仰賴英文
在那之前先慢慢提升功力吧
回頂端
檢視會員個人資料 發送私人訊息
zhengyao
對這略感興趣的新人


註冊時間: 2008-05-18
文章: 28

89.61 果凍幣

發表發表於: 2009-1-12, AM 8:47 星期一    文章主題: 引言回覆

我覺得c++是c的擴充版,
導入了一些物件導向概念來分類函式和變數,
所以c++是務必要學的,
至於c++有些不好用的function,我還是用c的範圍來自己寫啦!
回頂端
檢視會員個人資料 發送私人訊息
ZXCV005003
稍嫌羞澀的路人


註冊時間: 2009-01-07
文章: 2

0.00 果凍幣

發表發表於: 2009-1-12, PM 8:00 星期一    文章主題: 引言回覆

照著上面說的作
可是我再編譯時候
他會出現錯誤
這是怎麼回事
文法我是用複製貼上的
把1-9刪掉也試過
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2009-1-12, PM 10:16 星期一    文章主題: 引言回覆

ZXCV005003 寫到:
照著上面說的作
可是我再編譯時候
他會出現錯誤
這是怎麼回事
文法我是用複製貼上的
把1-9刪掉也試過

在編譯時,output視窗中應該會有錯誤訊息
你可以把它複製起來,貼到這邊來問
會引起編譯錯誤的可能性有成千上萬種
沒有足夠的資訊的話是猜不出來的
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
chongren
偶而上來逛逛的過客


註冊時間: 2009-07-27
文章: 14
來自: 台北
152.02 果凍幣

發表發表於: 2009-9-16, AM 10:59 星期三    文章主題: 引言回覆

引用(std::cout << "這行字會出現在cmd中" << std::endl;)
請問一下std是什麼意思呢?
以前我在學C++的時候都沒有加上,
都是直接cout << "這行字會出現在cmd中" << endl;
好像在寫using namespace std才會出現std。

_________________
爬文?
爬文這種舉動不適合我這種腦殘
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站 雅虎訊息通 MSN Messenger
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2009-9-22, PM 12:24 星期二    文章主題: 引言回覆

chongren 寫到:
引用(std::cout << "這行字會出現在cmd中" << std::endl;)
請問一下std是什麼意思呢?
以前我在學C++的時候都沒有加上,
都是直接cout << "這行字會出現在cmd中" << endl;
好像在寫using namespace std才會出現std。

請參考:[C++][3]namespace
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
顏聖紋
稍嫌羞澀的路人


註冊時間: 2010-06-20
文章: 2

15.26 果凍幣

發表發表於: 2010-6-21, AM 12:03 星期一    文章主題: 引言回覆

yag 寫到:
玄穹 寫到:
大大教的全都是C++的麼 可以用C的程式去編輯麼 我是新手請多多包含

「編輯」的話可以
「編譯」的話不行
C++的編譯器可以編譯C的程式碼
但C的編譯器不能編譯C++的程式碼


無意中發現貴站
看到yag大大一系列的學程介紹
讓我燃起了學c++的衝動
我是程式語言的門外漢
有一些疑問請大大不吝指教
想要學c++我的電腦要灌哪種作業系統
xp或win7?的哪一種版本?home edtion 還是profesional或是...
c++的程式要去哪買?順發這類的賣場有得買嗎(我想用原版程式)
最後感謝yag大大這麼熱心的寫出教程
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
yag
Site Admin


註冊時間: 2007-05-02
文章: 688

2673.35 果凍幣

發表發表於: 2010-6-21, AM 9:16 星期一    文章主題: 引言回覆

XP SP3以上的作業系統都可以,沒有影響
我不確定順發之類的賣場有沒有,或許可以去看看
燦琨之類的也可以去看看
如果有賣的話,應該是叫做Visual Studio 2010
只是這個的價格不便宜,可能要近萬
所以在買之前我建議你可以先上微軟下載免費版試用一下
確定自己對coding具有足夠的興趣與毅力
另外大賣場買不到的話,也可以上微軟官網看看購買資訊
或者可能也可以去一些電腦補習班問問看能不能跟他們買

ps.Visual Studio 2010最終試用版
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
前往頁面 1, 2  下一頁
1頁(共2頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作