我我我…雖然很久很久以前有寫過C++,不過經過五六年都忘光光了,而且似乎沒有寫到這個境界,完完全全就只是用C的概念,寫成C++ (大誤),想當然爾,最重要的物件導向觀念,我當然像白癡一樣什麼都不會(大哭跑開…)。但是俗語說得好:「就算沒吃過豬肉,也要看過豬走路。」所以…
我絕對沒有說C++是豬喔!大家不要誤會我。(挺)
在我還沒有開始寫C++時,難免會看到許多用C++寫的程式碼,這時候有幾個符號看不懂到讓我想哭。
class 類似於 struct,一開始轉換時是這樣想像的,雖然不全然是這樣,但是看到class還不至於讓我哭哭。
後來,聽說class家裡面有public(客廳)、private(房間)、freiend(廚房,這當然是我亂掰的。)、protect(書房,這也是我亂掰的。)等這些分類,依照遠近親疏而有不同的權限,看到這裡很清楚的知道,C++跟C比起來,多了比較多的原則,為人也比較機車一點,動不動就搞小團體(大誤)。
好吧!來談談讓我傷心的符號吧!讓我以前每次看到都覺得天殺的這什麼意思…
1: #include "IntArray.h"
2:
3: class IntArrayRC
: public IntArray
{
4:
5: public:
6: //balabala...
7: private:
8: //balabala...
9:
10: };
就是那個該死的冒號( : ),重點是還是隨處可見這樣的寫法呢!Q________Q
因此,這句話翻成中文應該怎麼說呢?「我IntArrayRC,繼承了IntArray那位先生家裡public的東西。」
他家客廳(public)有的東西我都有喔!而且我還有更多呢!哼哼~~
接著,就是另一個符號了…
對於沒寫過C++,卻一天到晚看C++的人來說,剛開始也覺得這符號天殺的很礙眼。
就是前面那個符號在加倍的雙冒號(::),重點是這更是一個隨處可見的寫法喔!XDrz
比如說,在一個Ball.h裡看到這樣的宣告~
1: class Ball {
2:
3: public:
4: Ball();
5: Ball(double, const char*);
6: Ball(double, string&);
7:
8: private:
9: double _radius;
10: string _name;
11:
12: };
接著又在Ball.cpp當中看到了這幾行….
1: #include "Ball.h"
2: using namespace std;
3:
4: Ball
::
Ball() {
5: _radius = 0.0;
6: _name = "noname ball";
7: }
8:
9: Ball
::
Ball(double radius, const char *name) {
10: _radius = radius;
11: _name = name;
12: }
13:
14: Ball
::
Ball(double radius, string &name) {
15: _radius = radius;
16: _name = name;
17: }
嗯嗯!這樣應該一目了然了吧!@@”
雙冒號(::)就是封裝的用法,意思就是Ball class說:「Ball()這個函式是我家的人。」
我家的人都可以盡情的使用我房間(private)的變數喔!咪啾*(> . ^)o
以上不專業介紹完畢,謝謝大家。
以後就算不會寫C++,也跟我一樣至少會看豬走路了!耶~~~
至於為什麼Ball()裡面可以吃這麼多種型別呢?這就是傳說中的多載啦!哈哈~