c ++Primer學習筆記之一

來源:互聯網
上載者:User
文章目錄
  • 2.3.3 定義對象
  • 2.3.5 聲明和定義
  • 3.2.2 string 對象的讀寫
  • 3.2.3 string對象的操作
  • 4.2.3 指標的操作

 

2011-8-29 09:28  周一  晴

 

2.3.3 定義對象

   1 初始化

    兩種初始化的形式:直接初始化和複製初始化。直接初始化將初始化值放在括弧“()”裡來初始化;複製初始化用等號“=”來初始化。

  初始化與賦值的區別:

 初始化:建立變數並給它賦值;

賦值: 擦除對象的當前值並用新值來代替,這是因為當定義一個對象時它會預設的賦予其一個預設值。

 

2.3.5 聲明和定義

  變數的定義:

       為變數分配儲存空間,指定初值。在一個程式中,變數有且僅有一個定義。

  聲明:

   用於向程式表明變數的類型和名字。定義也是聲明:當定義變數時本身就聲明了它的類型和名字。

  關鍵字extern 可以用來聲明變數而不是定義變數。使用extern聲明變數時包括extern關鍵字、變數類型、變數名。extern聲明不分配儲存空間,只是說明變數已經在其它地方定義,變數可以聲明多次,但只能定義一次。

   若在使用extern的同時時也給變數賦值,則變為定義,此時要分配儲存空間,之後就不能再使用此變數名再定義了,也不能再初始化了。

 

2.4 const限定符

 1 const 用來定義一個常量,通過const定義的變數只能在本檔案中使用,其它檔案不能引用,若想在其它檔案中使用可以在定義時使用關鍵字 extern。

 

2.9 編寫自己的標頭檔

1 標頭檔用於聲明而不是用於定義,其中不能有變數或函數的定義。

2 const變數為常量運算式時,應放在標頭檔中;若不是,不應該放在標頭檔中定義。

3 先行編譯時防止多次包含一個標頭檔的方法:

 

   #ifndef SALESITEM_H

   #define SALESITEM_H

  ….

 

   #endif

 

3.2 標準 string類型3.2.2 string 對象的讀寫

  1 string類型的輸入操作符:

n         讀取並忽略開關所有的空白字元(如空隔、分行符號、定位字元)。

n         讀取字元直到再次遇到空白字元,讀取終止。

2         getline讀取整行文本

string line;

getline(cin, line);

 

 它不忽略分行符號,但也不儲存分行符號,遇到分行符號就停止讀取。

3.2.3 string對象的操作

1 為了避免溢出,儲存string對象size最安全的方法是使用標準庫類型string::size_type.

2 當進行string對象和字串字面值混合串連操作時,+操作符的左右運算元必須至少有一個是string類型的。

 

3.3 標準庫vector類型

1 一些有自訂建構函式但沒有預設建構函式的類,在初始化這種類型的vector對象時,程式員就不能僅提供元素個數,還需要提供元素初始值。

 

4.1 數組

1、特殊的字元數組

 兩種不同賦值方式所佔用的空間不同:

      char ca1[ ] = {'c','+','+'};

      char ca2[ ] = {'c','+','+','\0'};

      char ca3[] = "C++";

 

      cout<<" sizeof( ca1 ) = " << sizeof(ca1)<<endl;

      cout<<" sizeof( ca2 ) = " << sizeof(ca2)<<endl;

      cout<<" sizeof( ca3 ) = " << sizeof(ca3)<<endl;

輸出結果:

sizeof( ca1 ) = 3

 sizeof( ca2 ) = 4

 sizeof( ca3 ) = 4

 

4.2 指標的引入4.2.3 指標的操作

 1 當一個指標變數sp1指向一個字串變數s1時,若此時再給此指標sp1賦值,則也會改變字串變數s1。而若此時sp1指向另一指標sp2,只是讓sp1重新指向了一個變數,但並沒改變s1的值。

string s1("some values");

    string *sp1 = &s1;

    string s2("another");

    string *sp2 = &s2;

 

    cout<<" *sp1 = "<<*sp1<<endl;

    cout<<" s1 = "<<s1<<endl;

    cout<<" &s1 = "<<&s1<<endl;

    cout<<" sp1 = "<<sp1<<endl;

 

    cout<<" *sp2 = "<<*sp2<<endl;

    cout<<" &s2 = "<<&s2<<endl;

    cout<<" sp2 = "<<sp2<<endl;

 

 

 

    *sp1 = " a new value ";

 

  cout<<"======================"<<endl;

    cout<<" *sp1 = "<<*sp1<<endl;

    cout<<" s1 = "<<s1<<endl;

    cout<<" &s1 = "<<&s1<<endl;

    cout<<" sp1 = "<<sp1<<endl;

 

    cout<<" *sp2 = "<<*sp2<<endl;

    cout<<" &s2 = "<<&s2<<endl;

    cout<<" sp2 = "<<sp2<<endl;

 

 

    sp1 = sp2;

 

  cout<<"======================"<<endl;

    cout<<" *sp1 = "<<*sp1<<endl;

    cout<<" s1 = "<<s1<<endl;

    cout<<" &s1 = "<<&s1<<endl;

    cout<<" sp1 = "<<sp1<<endl;

 

    cout<<" *sp2 = "<<*sp2<<endl;

    cout<<" &s2 = "<<&s2<<endl;

    cout<<" sp2 = "<<sp2<<endl;

 

輸出結果:

*sp1 = some values

 s1 = some values

 &s1 = 0012FF34

 sp1 = 0012FF34

 *sp2 = another

 &s2 = 0012FF00

 sp2 = 0012FF00

======================

 *sp1 =  a new value

 s1 =  a new value

 &s1 = 0012FF34

 sp1 = 0012FF34

 *sp2 = another

 &s2 = 0012FF00

 sp2 = 0012FF00

======================

 *sp1 = another

 s1 =  a new value

 &s1 = 0012FF34

 sp1 = 0012FF00

 *sp2 = another

 &s2 = 0012FF00

 sp2 = 0012FF00

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.