Re: [討論] struct的成員函式
※ 引述《kevinptt (囧rz凱子)》之銘言:
: 以下我先把我對於struct的認知稍微敘述,如果有誤請指正 :)
: struct是在C語言就有的東西
: 而在C之中,並 不允許/沒有 成員函式 的存在
: 所以
: struct test{
: test() { }
: };
: 是不行的
: 但是在C++底下 卻會過compiler
: 我想問的是
: 在觀念上,應不應該強調要使用成員函式(C++下)
: 使用class會比較"正統"
: 就像我有一個同學跟我說過
: C++就應該使用<cstdio>而不要用<stdio.h>
: 希望各位強大的網友們可以替我解答<(_ _)>
推文不小心離題了,回個文來說說我的想法
我想這並沒有什麼標準的答案
不過我會覺得,當我寫C++的時候,看起來就要像C++
如果可以寫 cstdio,我就不想寫 stdio.h
(不過遇到像 windows.h 這種情況,就會覺得 .h 很刺眼)
如果可以寫 cout,我就不想寫 printf
如果可以用 stringstream,我就不想寫 sprintf (雖然後者常常比較簡潔)
如果可以用 vector,那我就會盡量別用 array
不過我常常不知道要怎麼正確的選擇 pointer 與 reference 才是比較好
所以還是會比較習慣用 pointer,而少用 reference
寫C++的時候,即使class與struct幾乎沒有差別
我還是習慣只當我需要「全部都是public欄位,不擺任何函式」才會用struct
只要有private的需求,或者寫member function的需求
或是繼承、多型的需求,就會用class
就像我寫C#的時候,絕對不會把所有的事情都用 static member function 來寫
看過有些人寫C#或Java,只有一個 class,而且 member function (或稱 method)
全部都寫成 static,然後交給 main 來呼叫,就像寫 C 那樣
這種寫法絕不能說他錯,但就會覺得很怪異...
至於投資什麼程式語言比較好,我覺得要看興趣,以及自己想寫什麼程式
如果你想玩底層,那你說你要學Java就很怪異,學C會比較妥當
如果你說你看到pointer就會想吐,那就學C#或Java或其他更高階的語言
python或perl或ruby也是很好玩的,Javascript學熟後能做的事情也很多
個人想法:如果時間允許的話,我會建議盡量把純C學好,C#或Java挑一個學
至於C++,有愛的話再去鑽研吧 (在這個板講這種話好像很奇怪XD)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.35.184.77
推
11/12 00:10, , 1F
11/12 00:10, 1F
→
11/12 00:11, , 2F
11/12 00:11, 2F
→
11/12 00:12, , 3F
11/12 00:12, 3F
我一直覺得 printf("", ...); 那裡要自己填 type 這件事很麻煩...XD
而vector光是一個push_back就讓我愛不釋手了,array的size也是個大麻煩
(這樣看起來我用cout跟vector好像只是想偷懶....)
→
11/12 00:13, , 4F
11/12 00:13, 4F
據說 reference 的底層實作還是跟 pointer 是一樣的 (?)
我很怕那種 void foo(int a, int &b) 這類的程式
在函式裡如果寫 { a = 10; b = 20; }
看不出 a 不會影響外部值,而 b 會影響
如果是 void foo(int a, int *b) 的話
寫成 { a = 10; *b = 20; } 就會很明顯
→
11/12 00:17, , 5F
11/12 00:17, 5F
void pointer(int *ptr) {
*ptr = 10;
}
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
movl $10, (%eax)
popl %ebp
ret
void reference(int &ref) {
ref = 20;
}
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
movl $20, (%eax)
popl %ebp
ret
在這個情況,兩者的實作幾乎是一樣的 XD
→
11/12 00:17, , 6F
11/12 00:17, 6F
推
11/12 00:20, , 7F
11/12 00:20, 7F
→
11/12 00:22, , 8F
11/12 00:22, 8F
→
11/12 00:23, , 9F
11/12 00:23, 9F
→
11/12 00:23, , 10F
11/12 00:23, 10F
被陰是什麼意思呢?這裡我不太懂
我只知道 windows api 裡函式宣告喜歡使用 IN OUT,其實還挺清楚的
特別是 api 裡很多 void foo(......, OUT PVOID reult) 這種東西
有那個 OUT 可以知道那個參數是拿來擺結果的
→
11/12 00:24, , 11F
11/12 00:24, 11F
我和 C++0x 跟 boost 都不太熟...XD
※ 編輯: james732 來自: 114.35.184.77 (11/12 00:30)
→
11/12 00:33, , 12F
11/12 00:33, 12F
→
11/12 00:33, , 13F
11/12 00:33, 13F
→
11/12 00:33, , 14F
11/12 00:33, 14F
→
11/12 02:05, , 15F
11/12 02:05, 15F
→
11/12 02:05, , 16F
11/12 02:05, 16F
→
11/12 02:06, , 17F
11/12 02:06, 17F
確實output不是重點了,特別是 console 程式的 output XD
推
11/12 02:16, , 18F
11/12 02:16, 18F
有的時候反而覺得是缺點耶 XD
※ 編輯: james732 來自: 114.35.184.77 (11/12 10:02)
→
11/12 16:17, , 19F
11/12 16:17, 19F
→
11/12 21:03, , 20F
11/12 21:03, 20F
→
11/12 21:04, , 21F
11/12 21:04, 21F
→
11/12 21:05, , 22F
11/12 21:05, 22F
→
11/12 21:06, , 23F
11/12 21:06, 23F
→
11/12 21:06, , 24F
11/12 21:06, 24F
→
11/12 21:07, , 25F
11/12 21:07, 25F
→
11/12 21:08, , 26F
11/12 21:08, 26F
→
11/12 21:08, , 27F
11/12 21:08, 27F
→
11/12 21:10, , 28F
11/12 21:10, 28F
→
11/12 21:11, , 29F
11/12 21:11, 29F
→
11/12 21:13, , 30F
11/12 21:13, 30F
→
11/12 21:14, , 31F
11/12 21:14, 31F
→
11/12 21:14, , 32F
11/12 21:14, 32F
→
11/12 21:15, , 33F
11/12 21:15, 33F
→
11/12 21:17, , 34F
11/12 21:17, 34F
→
11/12 21:18, , 35F
11/12 21:18, 35F
→
11/12 21:21, , 36F
11/12 21:21, 36F
→
11/12 21:22, , 37F
11/12 21:22, 37F
→
11/12 21:23, , 38F
11/12 21:23, 38F
→
11/12 21:23, , 39F
11/12 21:23, 39F
推
11/12 21:31, , 40F
11/12 21:31, 40F
→
11/12 21:32, , 41F
11/12 21:32, 41F
→
11/12 21:34, , 42F
11/12 21:34, 42F
→
11/12 21:35, , 43F
11/12 21:35, 43F
討論串 (同標題文章)