我將分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 時發生存取違規;不知什麼原因?求助博友幫忙!
這是今天所講的全部內容,謝謝關注!