伊莉討論區

標題: 如何從頭學起C++? [打印本頁]

作者: babysking5    時間: 2017-5-1 01:14 PM     標題: 如何從頭學起C++?

我最近想開始學C++

但覺得跟C語言又差蠻多的

而且我的C語言大概也只學到for loop的地方@@

不知道各位是怎麼開始學C++的?

作者: ash1326    時間: 2017-5-11 02:23 AM

C語言一定要學好。C不行直接寫C++有難度

建議先打好C語言的基礎,再去學習OOD,然後新手建議從Java開始練

等到已經了解整個OOD的觀念後,從Java轉C++只是改變你的語法而已
作者: coal511464    時間: 2017-5-12 12:30 PM

去大學偷聽程設課程....剩下的只能多寫
作者: weirdococo    時間: 2017-5-12 01:13 PM

以我的例子,我的第一個語言是script language,像是python , ruby , perl ....,
基本上我會說C++很難用但不是很難學,寫不出東西一般只是說你沒有專業知識,
然而script有很多的演算法和專業領域的程式庫可以觀摩,所以用C++就只剩下
(這一個東西用C++怎麼寫? 寫不出來去stackoverflow問)這樣的感覺。
所以我會建議你不要先學C 或 C++ 這類語言,C 或 C++ 會進步比較快。

作者: superwaterdog    時間: 2017-5-18 10:15 PM

同意樓上說的
先把基礎工練起來
邏輯設計觀念建立
後面只是運用的居多

作者: cockroachrun    時間: 2017-5-19 09:38 AM

C++ 跟C 一樣不好寫. 他跟script language, java 有一個很大的不同點就是沒有   Garbage Collection (記億體垃圾收集GC). 且C++/C 對型別有強列的要求.  沒有GC 你要自己管裡記億體回收. 這導致很大的程式設計上的麻煩.
作者: ren1244    時間: 2017-5-20 12:27 AM

我國中時買了一本C語言的書,也把他看完了。
那時陣列、指標也差不多都能了解。
因為課業關係,到大學才繼續碰,開始會去找別人問的題目來做。
後來有一些解題系統,拿來作練習還不錯。

至於語言,先後碰了 C++ javascript PHP lua VB
python是最近才碰的

我發現自己只有學C跟C++是認真看完整本書
其他語言都是想做甚麼東西時,順帶學的
但我覺得後來在學其他語言,受惠於C/C++很大
也有利於我在用高級語言時盡量避免無謂的複製與重新創造物件
因為我感受得到那背後的代價是甚麼
不過也是有些東西是從其他語言學到的
例如javascript的closure是C/C++沒有的
然而,我也深深感受到python這類語言
不需要特別link其他的library就能做很多事情有多方便

至於怎麼學?
我覺得抱持興趣,或是有想做的東西都是很好的方法
累的話也不需勉強,但想玩時就好好享受那樂趣。

對了,有基本能力的話,可以看一些「資料結構」跟「演算法」的東西
這裡面比起學語言更有樂趣。

學語言就像是學會寫字
而「資料結構」跟「演算法」就像是學會怎麼寫出各種文章
作者: chevylin0802    時間: 2017-5-25 08:58 AM

本帖最後由 chevylin0802 於 2017-5-25 09:04 AM 編輯
cockroachrun 發表於 2017-5-19 09:38 AM
C++ 跟C 一樣不好寫. 他跟script language, java 有一個很大的不同點就是沒有   Garbage Collection (記億 ...


這只是突顯出你的程式寫作習慣不好
事實上
只要是編譯產出的是可執行檔的程式語言
都不會有GC
有GC的功能的都是要靠直譯器做
即使是java號稱執行在Java VM上
其實也一樣只是直譯器
只是名稱搞得好聽一些而已
型別問題也一樣
只要是編譯成機器碼的可執行檔
都會需要較硬性的型別規定
腳本程式語言之所以可以不用
就是在於它是由直譯器一行一行的執行腳本
變數的儲存位置與空間
可以由直譯器隨時變動的
即使你前一行把a設成10的正整數
下一行你照樣可以把a寫成hello的字串
腳本程式語言之所以現在流行起來
只是因為它具有邊編輯程式邊執行除錯的優勢
以及不需要擔心記憶體空間被配置而不釋放
所以開始取代了Java在應用層的程式市場
其實也只不過是回到Apple II的時代時
一開機就自動進入BASIC編輯環境
只不過現在用的是python或者是其他腳本語言環境
所以你所認為的那兩個麻煩
只是突顯出對你程式設計的不嚴謹
這是不好的習慣與對於程式設計不應該有的態度

作者: chevylin0802    時間: 2017-5-25 10:01 AM

本帖最後由 chevylin0802 於 2017-5-25 10:28 AM 編輯
ren1244 發表於 2017-5-20 12:27 AM
我國中時買了一本C語言的書,也把他看完了。
那時陣列、指標也差不多都能了解。
因為課業關係,到大學才繼 ...

關於重新創造物件的問題
有一點是需要修正你的想法的

先不談C語言的部份
因為C並沒有物件的語法
只有結構的宣告方式

所以我就只針對C++來說明一些問題
要講創造C++的物件背後所付出的代價的話
從記憶體的使用上來說
子物件甚至於已經繼承好幾層的子物件
對記憶體的浪費當然會相當可觀
但即使是如此
以現在動輒數GB的記憶體容量的PC來說
還真的算不上什麼鳥事
所以基本上可以是被忽略的
除非是像我們這種開發嵌入式系統的人
可能記憶體都只有幾十MB或幾百MB的情況
才需要對記憶體容量的問題特別的小心注意
不過如果真的要對記憶體空間那麼輜銖必較的話
已經不可能去用C++寫了
只會使用單純的C來寫
而另一個負擔無非就是會造成不必要的函式層層呼叫的問題
這確實是存在的
畢竟只要是層層堆疊出來的物件就會有這種層層呼叫procedure的情況(指組合語言的proc)
這還真的是免不了
但是對於已經是在Giga Hz級的PC來講
這也一樣算不上什麼
畢竟它不是早期的8088/8086的PC, 正常工作只有在3.77MHz,超頻也只不過8MHz
用不著那麼在意以及小心程式類似遞迴式呼叫的問題
何況系統堆疊也不像DOS只能給你256Bytes
所以還真的不需要那麼特別的在意物件所帶來的負擔
但是C++其實對程式設計師來講也是一個很大的負擔
不過並不是指C++程式語言本身
而是因為網路的關係
使得有很多人可以從網路免費獲取許多已經被一些民間組織或企業所提供的C++函式庫
這種百花齊放百家爭鳴的情形下
導致讓許多程式設計師享受到免費使用函式庫的機會
而它也同樣存在於其他各種類型的程式語言上
只是C++給程式設計師所帶來的負擔卻是遠比其他類型的程式語言要來得嚴重許多
所以避免複製或創建不必要的物件的問題
應該是擺在繼承這些公開的程式庫裏的物件而言
當然並不代表著外界的函式庫都不能去複製或創建繼承
只是很多人就只是去使用而並沒有真正的去了解
台灣的學生正面臨的就是這種問題
把API當成是好用的工具
至於這個工具到底有沒有真正的去了解
則不關他們的事
反正會用就夠了
只要會開車誰還管輪胎是怎麼做出來的
就因為抱持著這種心態在做研發
所以常常遇到問題不知道如何解決
很多企業裏面也常常看到這種程式設計師
美其名叫做程式設計師而已
事實上完全沒有系統概念
也完全不懂什麼是系統分析以及系統設計
勉勉強強只能算是工廠裏的作業員那樣子的咖而已
可是卻都個個都叫做學士碩士跟博士
所以很多時候真的很感慨
現在連中國大陸都有許多人在網路上發展許多前瞻性可持久性以及擴充性的研發專案
自由軟體的貢獻度上雖然追不上歐美
但起碼已經起了個頭
然而台灣香港以及澳門等
卻是連根毛都沒有


作者: aa8764114    時間: 2017-6-2 02:45 PM

C++只是比C語言多加物件導向還有其他很狂功能的昇級版
撇除物件導向還有那些功能
C跟C++根本就是一樣的
而且C++又有比C還要簡化的語法
個人覺得沒有甚麼C++比較難C比較簡單這回事
其實我覺得你可以直接學C++
作者: wlin2544    時間: 2017-6-3 03:26 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chevylin0802    時間: 2017-6-3 01:53 PM

本帖最後由 chevylin0802 於 2017-6-3 02:26 PM 編輯
wlin2544 發表於 2017-6-3 03:26 AM
想要藉著這個發問 順便問一個問題~~
就是 C++ 到底要練到什麼程度 才算是可以在職場上寫程式是OK的
或者是 ...


坦白講,講到職場的時候。恐怕會對你打擊不小。放在20年前,C++可以算當紅炸子雞。台灣會有一堆企業搶著找C++的工程師。不管你是會微軟的MFC還是會寶蘭的C++ builder,都不怕找不到工作。那是微軟一統PC天下的時代。隔了五年之後,嵌入式系統成了主流。C++工程師更紅了,不過與此同時,Java也開始展露頭角。只是當時的CPU運算能力還沒現在這麼強,Java的視窗應用程式佔不到便宜。市場仍然被C++所壟斷。之後,Java朝向伺服器端的應用,也因此開始與php及asp對上。但是php挾著龎大的開源資源優勢,以及MySQL的強大執行優勢,使得Java工程師並沒有佔到什麼便宜。可是與此同時,嵌入式系統的產品因為卡在記憶體的容量問題,也致使許多C++程式面臨到開發困難。微軟的C#,對C++的就業市場,帶來第一波的打擊。緊接著,CPU的速度跟上來了,Java原先在畫面反應速度慢的問題得到了關鍵性的改善,也搶走了C++的市場。有點幸運的是,當Android的出現,改變了嵌入式系統的規格生態。原本的8MB/16MB/32MB的記憶體規格,一下子來到128MB起跳,原因是價格無限趨近,甚至還有時候是因為高容量單價比低容量便宜造成。這種情況顛覆了原本需要斤斤計較記憶體的嵌入式系統的規格,從而也給C++帶來一些機會,尤其是有UI介面的,QT+的函式庫應用成了需求的主因。但是並不包括Android的工作機會。因為Android需要用到的往往是C比較多些,主要是寫驅動程式以及Jni的部份。但這種的需求遠比寫Java App的要來得少很多。而且C++工程師還要會Java才能在Android的開發團隊生存。C++工程師不吃香了嗎?不算是不吃香,而是嵌入式系統的開發,他們要全能的工程師。要會做嵌入式系統的整體性的整合,要能夠會開發C++程式但是只是附帶的以及非必需,要能夠會使用純C語言寫驅動程式。因為現在更多的情況是偏向於無UI的嵌入式的產品應用。比如家用NAS。有UI的系統,就連車載系統都改用Android做。這也使得C++的就職市場越來越少。只剩下一些還在靠C++ Builder開發的小眾市場。還可以算比較專心在做C++程式。其他的,都只是把C++當成附帶的條件而不是主要工作。甚至還可以預言,Python成為主要的程式語言,C/C++成為附帶的工作,都還會是未來除了Android之外的發展方向之一。除非你是去歐美國家找C++的工作機會,那還是非常管用。但是在華人地區,從來不在框架層著墨的地方,是不大有機會讓你做。至於要會到什麼樣程度才能在職場工作?這點我比較難以回答。不過,就以嵌入式系統來說,起碼要有能力自己寫一套伺服器程式是必需的。如果會寫Linux的驅動程式,那就更有機會。但是只有一個標準的要求,都只能用純C語言去寫,伺服器部份不可以使用gnu以外所提供的任何程式庫。Link list要有能力自己做。
作者: wlin2544    時間: 2017-6-3 04:47 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chevylin0802    時間: 2017-6-3 07:41 PM

本帖最後由 chevylin0802 於 2017-6-3 07:52 PM 編輯
wlin2544 發表於 2017-6-3 04:47 PM
好的 謝謝大大的回覆~~~
我自己是資工系的畢業生!!!!
但是大學的時候學得不太好 再加上找工作的困難度


現在還有新的PC網路遊戲嗎?
我印象中好像多半都是大陸開發的flash遊戲。
真正靠directx用C++做的3D遊戲好像已經很少出現了。
而unity3d如果是做成PC遊戲,也都改成用C#來做
好像沒有聽到還在用C++寫
至於工具類的程式,在微軟平台上
不是用C#,就是用Java。又或者是Python。
畢竟C++寫UI實在是太麻煩了。
遠遠不及C#跟Java方便。
還不如你就真的靠arduino去接專案
利用它積木式的硬體整合方式
靠簡單易完成的程式
做迅速完成的專案
畢竟別人做硬體,要畫線路圖,要進行電路佈置,要洗板子,要上電子零件。
搞搞弄弄的,沒半年以上的時間很難完成成品
現在全使用模組化,再靠3D列印機殼
對於小批量的生產而言指100K的量以下
是有很大的優勢的

作者: wlin2544    時間: 2017-6-3 11:30 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chevylin0802    時間: 2017-6-4 01:18 AM

本帖最後由 chevylin0802 於 2017-6-4 01:49 AM 編輯
wlin2544 發表於 2017-6-3 11:30 PM
對呀 unity是用C#來寫的這個我知道~~~
只是有時候在人力銀行上面找C++的遊戲工作
好像還有幾個的樣子~~~~ ...


逆向思考是對的,現在的Android Java工程師滿街跑。可被替代性很高。台灣在科技業的發展過程就是一窩蜂。所以連SSD廠商都在玩倒閉風。
Python在國外已經成為主流之一,但是台灣還在吹Java風。所以真的很可悲。
事實上,並不是Java不好。只是吹過頭了,跟不上國際上的腳步。當然另一方面也跟兩種程式語言的執行方式有關。
起碼Java要經過編譯變成虛擬機器碼,不像Python根本就是原始碼曝光在眼前,就像是php的情況一樣,所以也就不討喜。企業為了所謂的智慧財產權,當然希望原生程式碼不被曝光出來。但是,也因為這樣子,使得台灣的技術難以跟世界接軌。
目前Java還是有它的前途發展,但是主要是在伺服器端的應用,比如大數據。
至於總是拿跨平台來吹噓Java的好處,那就太把別人當白痴了。現在許多新的程式語言,哪一個不是跨平台的?
至於遊戲的工作,真的不會是你想要的。普通的科技公司,工程師每天都要花上三四個小時浪費在開會時間上,遊戲公司,需要跟美工協調,花費的時間恐怕更久,上班時間都被用到開會上,你只能靠加班來補足開發時間。試想看看,半夜下班,一天睡不到四個小時的工作,你受得了嗎?
拿生命換你的成就感,真的有意義嗎?
手機App是很多工作機會沒錯,但是因為門檻太低,一個從不會到熟練的新手,只需要三五個月就能出師。台灣還要面臨大陸人才輩出的壓力,試想看看,面對大陸的百萬千萬工程師大軍,台灣的Java工程師誰頂得住?更不用說,大陸的工程師,基本上一個可以頂台灣工程師兩個三個,指的是工作效率而不是薪資。
所以台灣的軟體界真的很悲哀,幾乎快被中國大陸的工程師給淹沒。
因此也只能靠速度取勝,才能成為一種新的活路。
我只能預測,未來的發展,總會改變成快速客製化時代。越短的研發速度才能換到賺錢機會。最有可能的是,消費市場的個人化差異化,很可能使得產品外觀上更注重小批量生產。這也導致硬體方面更多的是走向模組化與小型化的方向。
物聯網仍然還是看好,而Aduino則初具這方面的雛型。所以才看好這方面的應用。
至於它能做什麼產品,就要看你如何思考了。如果你把思考方向放在如何解決生活上的不便利,而不是想產品需要賦與什麼樣的功能時,那麼就很有機會可以做出好東西。如果老是在想功能面的話,那麼肯定做不出好東西。
因為科技就是在解決人的問題。舉一個夠好笑的例子,有人突發其想,搞了一台自動咖啡壺,就誤以為可以熱銷。其實問題才夠多,咖啡豆還是要靠人倒,水還是要靠人裝。空有一個可以靠手機App控制咖啡壺煮咖啡,能有什麼鳥用?

作者: wlin2544    時間: 2017-6-6 07:52 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: weirdococo    時間: 2017-6-7 01:03 AM

ren1244 發表於 2017-5-20 12:27 AM
我國中時買了一本C語言的書,也把他看完了。
那時陣列、指標也差不多都能了解。
因為課業關係,到大學才繼 ...

也是最近寫arduino時候發現的,C++11可以用Lambda expressions來表現出closure的感覺。
作者: hoare    時間: 2017-6-11 12:57 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: caoh    時間: 2017-6-11 09:06 AM

hoare 發表於 2017-6-11 12:57 AM
c++可以說是我學過的語言之中眉角最多的了,包山包海,什麼reference, virtual function, copy constructor ...

這些好像 C# 都有
  

作者: weirdococo    時間: 2017-6-11 11:31 AM

本帖最後由 weirdococo 於 2017-6-11 11:33 AM 編輯
caoh 發表於 2017-6-11 09:06 AM
這些好像 C# 都有

這些好像php都有,所以說php是世界上最好的程式語言
之前發現的笑料,笑笑就好
作者: weirdococo    時間: 2017-6-11 11:51 AM

wlin2544 發表於 2017-6-6 07:52 PM
感謝大大的回復~~~至於遊戲產業的問題~~
我覺得或許是我接觸的不多 也了解的不多
我只有去面試過一個公司~ ...

你在window上面編程,你就要了解window電腦,在andorid上編成就要了解android,
即便是有虛擬機的java,不同平台還是多說少少有不同,特別是在畫面上面,各種不同的API。
在不用andorid IDE的狀況下,你當然可以用自己想要的語言寫任何東西在android上,
像是用ndk + sdl 就可以用C來開發,如果你想要的話還可以用NativeScript javascript來開發,各有優缺。
關於網頁的技術,我的感覺是每三年到兩年會換一個主流當道,如果追流行還真要花不少心力。

作者: kuolung1    時間: 2017-6-12 10:20 AM

我覺得,C++ 是基本功,一定要學的,只是要精到什麼程度而已,
多學多看,總是不會錯的
作者: gwanhowalex    時間: 2017-7-8 07:06 AM

感覺是 若能找到一份程式撰寫C++的工作,願意培養新人的,直接有人帶最快。
作者: chevylin0802    時間: 2017-7-8 11:36 PM

wlin2544 發表於 2017-6-6 07:52 PM
感謝大大的回復~~~至於遊戲產業的問題~~
我覺得或許是我接觸的不多 也了解的不多
我只有去面試過一個公司~ ...

咳咳
打從兩年前
我就把自己公司的Android App部門完全裁撤掉了
把裡面20幾個工程師改去做伺服器端
從裁撤後改成發包給大陸的大學生去做以後
每年節省了一百多萬台幣的App研發開支
大陸學生連app的開發進度也比以前快了約兩倍半
所以真的不建議你走這條路
因為就衝著中國數百萬Android app工程師的數量
台灣只能被壓著吊打


作者: wlin2544    時間: 2017-7-12 12:18 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: chevylin0802    時間: 2017-7-12 01:51 PM

wlin2544 發表於 2017-7-12 12:18 PM
了解了~~~
那以目前軟體業的話
真的好像比較適合的就是網頁而已的樣子了Q_Q?

現在的企業
沒有人會帶新人
也沒有人會教新人
你只能靠你自己
很多公司甚至於連外網都給你封鎖住
不讓你連外網
連透過網路爬文學習的機會都不會有

所以你很難透過這樣的方式來學習
加上許多企業都會營造一種環境讓你加班
尤其是你看到你周遭的同事每一個人起碼都留到晚上十點十一點的時候
你認為你能學到什麼?

作者: lawrence710    時間: 2017-7-16 04:00 PM

如果看書自學,推薦劉邦鋒教授的"由片語學習C 程式設計"
作者: kitmsg    時間: 2017-7-22 06:03 PM

要學好C++最好的方法還是構思一個應用程式, 然後用C++去實踐, 否則只是寫一點簡單測所程式(例如Hello world)是不會學好的
作者: o_g349    時間: 2017-9-14 12:25 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: kaiwenwu    時間: 2017-9-29 04:35 PM

買了一本C++語言的書看。多作練習
作者: z1090128    時間: 2017-10-13 11:57 PM

還是先從C開始吧!!不然C++多一堆東西可能會學得很辛苦
作者: sisya    時間: 2017-11-13 06:23 PM

本帖最後由 sisya 於 2017-11-13 06:24 PM 編輯
wlin2544 發表於 2017-6-3 11:30 PM [url=forum.php?mod=redirect&goto=findpost&pid=302563153&ptid=11337518][/url]
對呀 unity是用C#來寫的這個我知道~~~
只是有時候在人力銀行上面找C++的遊戲工作
好像還有幾個的樣子~~~~ ...

哈囉,建議你也可以參考Unreal--免費使用+open source,只有第一季賺超過xxxx美元(忘記了),才需要付費,他好像可以不用寫程式就可以輸出任何平台的遊戲,另外,他也有支援VC++。

還有就是以OpenGL lib來舉例(看來你對遊戲有些許興趣),他在任何平台都有出現,而且是用C寫的。所以建議你不要放棄基本的C/C++,跨平台主要是建立在多層次的API,如果你只注意最上層的應用層面,反而忽略下層跨平台API設計方法,那就真的可惜了。
作者: sisya    時間: 2017-11-13 06:34 PM

wlin2544 發表於 2017-7-12 12:18 PM
了解了~~~
那以目前軟體業的話
真的好像比較適合的就是網頁而已的樣子了Q_Q?

目前台灣蠻流行加班的,記得要表現出願意配合加班,
理論上這樣一樣沒相關經驗的面試者,你就勝出了。

二來如果你沒經驗,還是入取了,表示老闆也不怕操你還操到不會。

其實Android有破碎化的問題,也都比較走外包的方向,真的我也有聽到整個部門被取消掉的。

三來就盡量找有加班費的公司,肝壞了,至少也賺不少。

四來就還是盡量把握住程式基本功,還有外文能力,還有強壯的身心,才能活的長長久久。
作者: wlin2544    時間: 2017-11-17 03:58 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: 神之風想    時間: 2018-5-5 09:32 AM

謝謝大大的分享喔,小弟覺得很好喔~解決了我的問題
作者: jackyo04    時間: 2018-6-20 05:03 PM

現在企業沒有所謂的新人期,或者教育訓練,幾乎都直接上戰場的,我之前工作不到一個月就要寫出一整個系統供產線使用,你認為呢!?不會有人帶你教你,也沒必要,台灣就是這樣,他們不願意花時間在你身上,寧願多花時間滑手機,因為你不過只是個來不久就會離職的員工,除非你撐上一年,而且還是進度都又到的那種,才有機會問人,也才有資格問,熟悉前跟熟悉後的問題是不同層面的東西,遇到什麼問題就只能怪自己,當初沒學好,然後,看是要後悔擺爛,還是接受挑戰繼續埋頭苦幹,程式本來就不會很難,只是看你會不會運用,知不知道怎麼用而已,我大概花了一個半月熟悉程式、環境,程式我是從不會到會,期間也都是靠加班換來的,沒人可以問,只能自己想辦法解決,但就看你自己能不能堅持住而已,一個半月後,我是進度都超前,然後,時間多到我可以自習學想要的東西,學到一定的程度後大概就是離職的時候了XD

加油吧,如果對程式真的有興趣的話,你會發現程式其實不難

作者: hunter00101    時間: 2018-9-20 01:15 PM

C++其實就是C的進階版,要如何學習,主要看自己的學習曲線如何,如果吸收很快,那就直接由C++學起,如果吸收不是很快,那就從C學起,不管學什麼都要不斷的練習和挑戰,這樣才能有所進步。
作者: startleisure    時間: 2018-9-22 12:47 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: z1090128    時間: 2018-9-28 12:00 PM

其實C++是在C上面更加深應用而已,先學C的基本在學C++可以快很多很多
作者: qwe21914    時間: 2019-11-1 12:42 PM

建議找個有興趣的題目來做,這樣學習比較快~~




歡迎光臨 伊莉討論區 (https://attach1201.eyny.com/) Powered by Discuz!