C++對C語言的非物件導向特性擴充(1)

來源:互聯網
上載者:User

  我將分3篇來介紹C++相對於C在非對象特性上的擴充,今天要講的是C++在注釋,輸入輸出,局部變數說明的擴充,以及const修飾符與C中的#define的比較。

  1.C++注釋除了包括原有C的塊注釋/*...*/,還提供了行注釋//,另外要注意的是對於注釋/*...*/的方式是不能嵌套的,比如/*C++/*C++*/C*/,這是不允許的。但是嵌套注釋//是可以的。

  2.我想大家對於C的輸入Printf和輸出Scanf函數應該是在熟悉不過了,在C++中除了可以正常使用這兩個函數外,又增加了標準輸入資料流對象cin和標準輸出資料流對象cout。但使用cin和cout進行輸入輸出更安全,方便。我用VC++寫了一下printf和scanf函數,可以正常運行,但會報出警告:

大概的意思是說scanf函數不安全,建議使用scanf_s代替,於是我用了scanf_s,結果警告就沒有了!

  再來說說cin對象,它在程式中用於代表標準輸入裝置,比如鍵盤,它必須與運算子>>一起運用,即cin>>,而運算子“>>”仍保留了C中“右移”的功能,作為輸入功能時,用於從對象cin讀取數值傳送給右方變數,比如int x;cin>>x;也可以連續輸入一連串資料比如cin>>a>>b>>c;它會按順序提取資料,存入對應變數,資料之間可以用空格、斷行符號分隔。

  但是當輸入的是字串(即類型為char*)時,提取運算子“>>”是會跳過空白,讀入後面的非Null 字元,直到遇到另一個空白字元為止,並在串尾放一個字串結束標誌‘\0’。因此輸入字串遇到空格時,就當作資料輸入結束比如:

char* str; cin>>str;

假如從鍵盤上輸入的是C++C++ CC!

則輸入後str的值為C++C++,後面的CC!被忽略了。另一種情況是要檢查輸入資料與變數的匹配情況比如:

int x;float y;

cin>>x>>y;

假如從鍵盤上輸入的是88.88 99.99

那麼結果並非是預想的i=88 y=99.99,而是i=88 y=0.88,原因系統是根據變數的類型來分隔輸入的資料,對於上述這種情況,系統把小數點前面的部分給了x,把剩下的0.88給了y;

   對於cout對象就不詳細說了,和cin差不多,要說的是像double a=3.1415926;cout<<"PI="<<a<<'\n';結果和C#裡的字串相加一樣的概念。其中C++中有一個操作符endl,它的作用與'\n'一樣;

  3.簡單說說C++局部變數,對於用過C#的人,不說也可以,舉個例子:一個函數

func()

{

  int x;

  x=1;

  int y;

  y=2;

  ...

}

這個函數在C中是不允許的,在編譯時間出錯,並終止編譯,但在C++中是正確的,變數的聲明可以和執行語句交替出現,只不過有效作用是有範圍限制的,但無論怎麼樣都要符合“先定義,再使用的原則”;

  4.做一下const修飾符和C中#define的比較,在C中,用#define來定義常量如:#define PI 3.14;程式與編譯時間標識符PI被全部置換為3.14.在先行編譯後,程式中不再出現PI這個標識符,PI不是變數,沒有類型,不佔儲存單元,且易出錯;而C++則用Const來修飾常量;如:

const double PI=3.14或double const PI=3.14

兩者相同,這時PI有類型,佔用儲存單元,有地址,可以用指標指向它;

const也可以與指標結合使用,看看這兩條語句const char* str="c++"和char* const str="c++"有什麼區別,一看好像沒什麼不同,其實他們的意義完全不一樣,前一個str是指向字串常量的普通指標變數,它不允許str指標所指的常量比如:str[2]=‘-';但是可允許改變它所指的地址,比如str="C--";對於第二種情況,則剛好相反,建立了一個常指標,即不能改變指標所指的地址,但可以改變資料,即str="C--"//不可以;str[2]='-';//可以。還有如果const定義的是一個整型常量,那麼關鍵字int可省略;

  5.最後用一段程式來聯絡總結一下今天的內容(開發工具vs2010,VC++控制台程式):

1 #include "stdafx.h"
2 #include <iostream>
3  #define PI 3.14;//C中定義常量
4 usingnamespace std;
5 /*C++在注釋,輸入輸出,
6 局部變數說明的擴充,以
7 及const修飾符與C中的
8 #define的比較*/
9 int main()
10 {
11 int x;
12 float y;
13 //C和C++的輸入輸出的比較
14 printf("scanf:請輸入一個整數:");
15 scanf_s("%d",&x);
16 printf("prinf:所輸入的整數:%d\n",x);
17 cout<<"cin:請輸入一個整數,一個浮點數:";
18 cin>>x>>y;
19 cout<<"cout:輸入的整數:"<<x<<"浮點數:"<<y<<endl;
20 //C++中cin的一些注意點
21 char*str=newchar[20];//局部變數說明
22 cout<<"請輸入一個字串:";
23 cin>>str;
24 cout<<"所輸入的字串:"<<str<<endl;
25
26 cout<<"請輸入一個整數,一個浮點數:";
27 cin>>x>>y;
28 cout<<"輸入的整數:"<<x<<"浮點數:"<<y<<endl;
29 //const的運用
30 constdouble pi=3.14;//或double const pi=3.14
31 cout<<"#define:PI"<<PI;
32 cout<<"const:pi"<<pi<<endl;
33
34 //指向字串常量的普通指標變數和常指標區別
35 constchar*chr_0="C++";//普通指標
36 //chr_0[2]='_';不允許
37 chr_0="C--";
38 cout<<"普通指標:"<<chr_0<<endl;
39
40 char*const chr_1="C++";//常指標
41 //chr_1="C--";//不允許
42 chr_1[2]='-';
43 cout<<"常指標:"<<chr_1<<endl;
44 return0;
45 }

在運行中出現了兩個問題,第一個如果把char *str=new char[20];改成char *str="";就會在運行中報錯:0xC0000005: 寫入位置 0x0041ba01 時發生存取違規,第二個還沒解決:char* const chr_1="C++";
 chr_1[2]='-';執行到這也報錯0xC0000005: 寫入位置 0x0041b976 時發生存取違規;不知什麼原因?求助博友幫忙!

這是今天所講的全部內容,謝謝關注!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.