• 5

請問程式設計C++的include和namespace要怎麼解釋最容易了解呢?

Google了很多資訊,也去圖書館借了一些入門的書,描述還是太抽像了,

另外,為什麼會有指標pointer這種東西呢? 將來工作上,那種情況或需求會用到指標呢?謝謝
2022-06-27 10:49 發佈
C++ 和 Java, C# 等都屬於物件導向的程式語言。

感謝emeryville的指證,我把 include 補充一下好了。

include 主要是載入外部的標頭檔,這個用法在 C++, ASP 等都有類似的作法。

例如您的程式需要某些功能是其他程式檔已經存在的,就可以把他引用進來,就像你自己的程式碼一樣,一起編譯。

=======================================================
物件導向將一些函式以類別(class)方式呈現,為了避免類別名稱衝突,造成程式中使用上的混淆,同時讓這些類別更容易被引用與查詢,因此加入 namespace 做為區隔。

例如和資料有關的就放在 system.data 底下,和安全有關的就放在 system.security 底下。各個企業為了避免和別人衝突,也可以在名稱空間加入公司的網址,例如臺灣銀行就可以把安全有關的 class 放到 tw.com.bot.security 底下,網路工具部分則可以放到 tw.com.bot.net 底下,例如 ftp 的全名可能就是 tw.com.bot.net.ftp 。

至於 import/using 則表示以下引用的類別是在哪一個名稱空間底下的,例如 import tw.com.bot.net 之後,就可以簡單地宣告
ftp myFtp = new ftp
而不需要 tw.com.bot.net.ftp myFtp = new tw.com.bot.net.ftp

簡單的說,當您在台北市跟人家說仁愛路,其實您可能預設 import/using 了台北市,即使跨了不同行政區,他還是同一條。

但是,如過出了台北市,您如果只講仁愛路,沒有人會知道在哪裡,尤其是高雄
高雄市鳳山區仁愛路
高雄市大寮區仁愛路
高雄市林園區仁愛路
高雄市路竹區仁愛路
高雄市阿蓮區仁愛路

至於指標,這個關係到記憶體配置為題,只要使用到 C++ 都會用到,不過比較新的語言 ,基本上都由 framework 做掉。指標與記憶配置,不是在這裡問就可以得到答案的。

程式這條路很長,加油吧。

==============================================
有的程式語言同時支援 import, include。
這兩者的最大差異主要在於 include 可能會重新編譯, 但是 import 不會重新編譯。
有一些老一點的書籍,口語陳述的時候並不會刻意去區分,還得從前後文去了解是引用外部程式一起編譯,或者只是參考。
本生物已配置全天候戰鬥系統~ 手機不通、Skype 離線時,請託夢,或留言!
Ricado

抱歉,因為他後面講了 namespace,所以我回答的是 namespace 部分。

2022-06-27 14:14
emeryville

唉,那keyword 是using,不是include 啊。

2022-06-27 14:19
自修且沒實務是很難體會到的
頂多知其然,不知其所以然


建議大量的寫跟模仿,多看官方文件,試著了解他們為何這樣設計
一開始不用細究每一行,因為過陣子回頭看你就會有不一樣的見解

另外...完全外行又沒有特殊目的的話不建議從C++入門
jeel54321

當初我是跳過 C++,直接學 JAVA 的。後來證明我的決定沒錯 ....

2022-06-27 13:31
unl7911 wrote:
另外,為什麼會有指標pointer這種東西呢? 將來工作上,那種情況或需求會用到指標呢?謝謝


指標是一種錯誤的程式語言設計,雖然可以節省一點程式執行時間,卻會製造大量錯誤,跟耗費程式師的大量時間。

新一代的程式語言都取消指標了!

什麼時候會用到我也很好奇?台灣有寫這種分秒必爭的程式的公司?
yagami7215

C#還是保留了Ref做傳址操作,怎麼會覺得新的語言都取消指標

2022-06-29 11:10
Ricado

很多人還是搞不清楚 ref, out 這兩者的差異

2022-06-30 8:13
jeel54321 wrote:
指標是一種錯誤的程式...(恕刪)


沒有指標不會有
多型
委派
callback function

指標的觀念很重要
就算開發時不會用到也要有指標的觀念
chunchiahsieh wrote:
沒有指標不會有多型委(恕刪)



Java, C# 都是透過 GC 處理記憶體問題,初學者頂多學到傳值、傳址。連使用委派 delegate 也是一知半解。這也就是為什麼很多用 Java 開發的系統每隔一段時間就要重開機,釋放系統資源。

指標最基本的練習,弄懂以下三段程式碼的意義。

int n = 10;
cout << n << endl;

int *np = &n;
cout << np << endl;


int t = *np;
cout << t << endl;


另外
int a = 10;
myClass obj = new myClass;

記憶體配置有何差別?stack vs. heap 又是什麼?

不搞清楚,怎麼寫系統?

我們公司是台灣一家小不啦嘰的軟體公司,開發的網路通訊軟體就用到很多指標。

我們幫某金融業開發的一套系統,連儲存在記憶體字串都要加密。
本生物已配置全天候戰鬥系統~ 手機不通、Skype 離線時,請託夢,或留言!
chunchiahsieh wrote:
多型
委派
callback function


有時搞懂這些術語,比拿來寫程式還傷腦筋 ...

雖然沒學過 C++,不太清楚是什麼,但還不至於搞不懂啦 ....
Ricado wrote:
int a = 10;
myClass obj = new myClass;

記憶體配置有何差別?stack vs. heap 又是什麼?


在 Dart 裡頭,已經沒有原始型別了!一個 int 都是物件。

因為是跨平台的,也不可能讓使用者碰到記憶體規劃 ....
jeel54321 wrote:
指標是一種錯誤的程式語言設計,雖然可以節省一點程式執行時間,卻會製造大量錯誤,跟耗費程式師的大量時間。

新一代的程式語言都取消指標了!

什麼時候會用到我也很好奇?台灣有寫這種分秒必爭的程式的公司?


雖然很多語言不再用指標,但是只是本質上把它包裝了一下而已,骨子裡不可能脫離指標的,相等兩個物件如果不用指標只能開一個新的物件把原物件內容全部複製到新物件其實反而更花時間,而且兩個物件本身根本不是相等的,只是內容一樣而已,去改動舊物件內容的值並不會自動反映到新物件,以C#來說,物件B等於物件A其實是B物件 reference A物件的指標,有人又要問,既然這樣,那為什麼不直接用A物件來操作就好了,搞一個B物件refer A是為什麼? 如果有一個陣列要把很多A塞進去,每個陣列的單元只要referece 每個A的指標就好了,不用新建一大堆的新物件把每個A的"內容"複製過去,另一個指標的好處就是共用,舉例來說小明是中山國小的學生,也是ABC課輔班的學生,最好的辦法是中山國小和ABC課輔班都referece同一個小明的指標,當下學年度小明長大一歲,這時教育部去查中山國小或ABC課輔班的小明都會大一歲,如果中山國小和ABC課輔班的小明都只是小明的分身而不是小明的指標,要是兩間忘記更新小明的歲數,就會變成實際情況不符
guest2000

指標有節省記憶體的好處. 另, Call by reference,Call by address,Call by name呼叫副程式可能的參數傳遞方式,Call by reference有指標味道.

2022-06-27 16:04
jeel54321

現在著重在跨平台,寫一次可以在 ios、android、web 跑,不須這樣斤斤計較記憶體了 ....另外指標不會節省記憶體。

2022-06-27 16:50
莎朗石頭 wrote:
雖然很多語言不再用指標,但是只是本質上把它包裝了一下而已




很多學校本科的程式設計都還是由 C++ 教起,不是要你以後一定使用 C++,而是讓您建立基本的觀念。

就像網通科系教你架設郵件伺服器,不見得以後用得到,可能公司就直接使用雲端服務了,但是自己架過 mail server 也可以更充分了解通訊觀念,對於伺服器的管理就更容易上手。當然也有學校直接教你怎麼設定使用gmail。
本生物已配置全天候戰鬥系統~ 手機不通、Skype 離線時,請託夢,或留言!
  • 5
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?