天天看點

經典中的品味:第二章 C++基本的對象,類型和值(上)2.1 一個簡單問候的例子2.2 變量及類型2.3 運算小結

上一章,我們大談了hello,world的一生。下面我們細細品味基礎中的一些,從一個簡單的案例開始,了解對象,類型等概念。我喜歡解釋例子,讓大家聽着有味,不枯燥~

最常見的就是keyborad input(鍵盤輸入)。從helloworldd的輸出,我們也想得到使用者的輸入。通常,實行中的程式會給它的輸入産生輸出。例如,輸入你的名字,輸出

一句問候。有時候它就在身邊,像我最愛的蘋果手機一樣。人機互動就是那麼簡單~

經典中的品味:第二章 C++基本的對象,類型和值(上)2.1 一個簡單問候的例子2.2 變量及類型2.3 運算小結

圖2.1.1 人機互動(.net)

回到技術點,為了讀取使用者輸入的資料,我們需要在計算機記憶體中某個地方放置讀取所需的内容。這就是對象(class)。對象是什麼,對象時一個某種類型的記憶體區域。其中類型則确定了對象的資訊。而一個有名字的對象,稱為該對象的執行個體(也叫變量)。做個比喻,一看到對象大家想到的就是人,但這裡人類才相當于對象。如果想到具體到你的對象,那是變量。

下面我們看下一個簡單問候的例子:

<a href="http://www.bysocket.com/?p=863#">?</a>

1

2

3

4

5

6

7

8

9

10

<code>#include &lt;iostream&gt;</code>

<code>#include &lt;string&gt;</code>

<code>using namespace std;</code>

<code>int</code> <code>main()</code>

<code>{</code>

<code>    </code><code>string your_name;</code>

<code>    </code><code>cin &gt;&gt; your_name;</code>

<code>    </code><code>cout &lt;&lt;</code><code>"你好~"</code> <code>&lt;&lt; your_name &lt;&lt; endl;</code>

<code>}</code>

從代碼中我們可以看出,這個程式很簡單。當你輸入你的名字,比如我的 “jeff_lee”。輸出如下:

經典中的品味:第二章 C++基本的對象,類型和值(上)2.1 一個簡單問候的例子2.2 變量及類型2.3 運算小結

圖2.1.2 顯示問候程式界面

值得注意的是我的fisrt name  和 last name 不能和空格隔開。原因很簡單:

剖析下剛剛那小程式(堅信:小程式也有學習地方):

<code>cin &gt;&gt; your_name;</code>

這個會儲存一個字元串的記憶體區域,并将這個區域命名為your_name。意義在于計算機為這個變量配置設定記憶體空間。如圖所示:

經典中的品味:第二章 C++基本的對象,類型和值(上)2.1 一個簡單問候的例子2.2 變量及類型2.3 運算小結

圖2.1.3 記憶體分析

<code>cout &lt;&lt;</code><code>"你好~"</code> <code>&lt;&lt; your_name &lt;&lt; endl;</code>

下面一句上面也講過,它會将根據變量類型,讓那個記憶體存入對象的值。本來上面空的記憶體區域則有了資料。如圖:

經典中的品味:第二章 C++基本的對象,類型和值(上)2.1 一個簡單問候的例子2.2 變量及類型2.3 運算小結

圖2.1.4 記憶體分析

正如我們上面所說,計算機記憶體存儲資料的位置稱為對象。我們需要用一個名字來通路,進而是這個對象成為變量。變量則有她特定的類型。基本類型羅列如下:

        bool 布爾型

  char 字元型 8位

  wchar_t 寬字元型 16位

  short 短整型 16位

  int 整形 16位

  long 長整形 32位

  float 單精度浮點型 6為有效數字

  double 雙精度浮點型 10位有效數字

  long double

下面 看下一個好玩的例子:

11

12

<code>    </code><code>int</code> <code>your_age;</code>

<code>    </code><code>cin &gt;&gt; your_name &gt;&gt; your_age;</code>

<code>    </code><code>cout &lt;&lt;</code><code>"hi!~"</code> <code>&lt;&lt; your_name &lt;&lt;</code><code>" is "</code> <code>&lt;&lt; your_age &lt;&lt;</code><code>" years old"</code><code>;</code>

如果你嘗試輸入“ jeff lee 21”,按下Enter鍵。你會很驚訝~,為什麼不是出現 “jeff lee is 21 years old.”而是

經典中的品味:第二章 C++基本的對象,類型和值(上)2.1 一個簡單問候的例子2.2 變量及類型2.3 運算小結

圖2.2 有趣例子的顯示

這裡我們關注的有兩點,再次再次強調 cin&gt;&gt;該操作符是根據後面變量的類型讀取資料。輸入結束條件 :遇到enter、space、tab鍵。其次,string型的“lee”不會被int型age所讀取。這是很屬虎的将是随機數。為什麼?因為age沒有被初始化,當你執行的時候,會得到記憶體中某部分的垃圾值。比如上面的 -858993460.你可以想想,如果再次運作下上面的程式,輸入一樣的話,age會變~

運算,何為運算?運算的本質其實是集合的映射。最初的程式基本都是為了運算誕生的。這小塊就仿佛來到了我們喜歡的數學領域。

經典中的品味:第二章 C++基本的對象,類型和值(上)2.1 一個簡單問候的例子2.2 變量及類型2.3 運算小結

圖 2.3 早期計算機

但是,很多想數學細節情況要記住。比如:

<code>string str =</code><code>"jefflee"</code><code>-</code><code>"lee"</code><code>;</code>

編譯器是拒絕對字元串的減運算。但編譯器很笨,她不知道有些例如,age大于0;

<code>int</code> <code>age = -</code><code>99</code><code>;</code>

在你看來是荒唐的,在它那裡确實正确的。

是以,運算要我們去符合編譯器規則,結合問題定義自己規則。

(這是第二章 上等下篇文章一起出來再總結。)

繼續閱讀