摘要
c++技術固然是很時髦的,許多c使用者都想在盡可能短的時間內為自己貼上c++的標籤。介紹c++的書很多,但只有那些已經僥倖入門的使用者才偶爾去翻翻,仍有不少在c++門口徘徊的流浪漢。
本文只針對c使用者,最好是一位很不錯的老使用者(譬如他在遇到最簡單的問題時都嘗試著使用指標),通過一些c和更好的c++(本文用的是borland c++3.1版本)例程介紹有關c++的一些知識,讓讀者朋友們「淺入深出」,輕輕鬆鬆c to c++!
一、標籤!標籤!
快快為你的程式貼上c++的標籤,讓你看起來很像個合格的c++使用者……
1.注釋(comment)
c++的注釋允許採取兩種形式。第一種是傳統c採用的/*和*/,另一種新採用的則是//,它表示從//至行尾皆為注釋部分。讀者朋友完全可以通過//使你的**帶上c++的氣息,如test0l:
//test01.cpp#include //i'm a c++user!
//…and c is out of date.
void main()
hello-world!
如果你嘗試著在test0l. exe中找到這些高階的注釋,很簡單,它們不會在那裡的。
2. cincout
你可能從test0l中嗅出什麼味兒來了,在c++中,其次的貴族是cout,而不是很老土的printf ( )。左移操作符』<<』的含義被重寫,稱作「輸出操作符」或「插入操作符」。你可以使用』<<』將一大堆的資料像糖葫蘆一樣串起來,然後再用cout輸出:
cout << "ascii code of "<< 'a' << " is:" <<97;ascii code of a is:97
如何來輸出乙個位址的值呢?在c中可以通過格式控制符」%p」來實現,如:
printf ("%p,&i);
類似地,c++也是這樣:
cout << & i;
但對字串就不同啦!因為:
char * string="waterloo bridge";
cout << string; //prints 『waterloo bridge'
只會輸出string的內容。但方法還是有的,如採取強制型別轉換:
cout<<(void *)string;
cin採取的操作符是』>>』,稱作「輸入操作符」或「提取操作符」。在標頭檔案iostream.h中有cin cout的原型定義,cin語句的書寫格式與cout的完全一樣:
cin>>i; //ok
cin>>&i; //error. illegal structure operation
看到了?別再傻傻地送乙個scanf()常用的』&』位址符給它。
c++另外提供了乙個操縱運算元endl,它的功能和』/n』完全一樣,如test0l中的cout語句可改版為:
cout << 」hello world!」<
3.即時宣告
這是筆者杜撰的乙個術語,它的原文為declarations mixed with statements,意即允許變數的宣告與語句的混合使用。傳統c程式提倡使用者將宣告和語句分開,如下形式:
int i=100;float f; //declarations
i++;
f=1.0/i; //statements
而c++拋棄這點可讀性,允許使用者採取更自由的書寫形式:
int i=100;i++;
float f =1. 0/i;
即時宣告常見於for迴圈語句中:
for(int i = 0; i < 16; i++)for(int j = 0; j < 16; j++)
putpixel(j i color[i][j]);
這種形式允許在語句段中任點宣告新的變數並不失時機地使用它(而不必在所有的宣告結束之後)。
特別地,c++強化了資料型別的類概念,對於以上出現的」int i=1 j=2;」完全可以寫成:
int i(1) j (2);
再如:
char * stringl("youth studio.」);char string2("computer fan.「);
這不屬於「即時宣告」的範疇,但這些特性足以讓你的**與先前愚昧的c產品區別開來。
4.作用域(scope)及其訪問操作符(scope qualifier operator)
即時宣告使
c語言的作用域的概念尤顯重要,例如以下語句包含著一條錯誤,因為ch變數在if塊外失去了作用域。
if(ok)char ch='!';
else
ch='?'; //error. access outside condition
作用域對應於某一變數的生存週期,它通常表現為以下五種:
塊作用域
開始於宣告點,結束於塊尾,塊是由{}括起的一段區域
函式作用域
函式作用域只有語句標號,標號名可以和goto語句一起在函式體任何地方
函式原型作用域
在函式原型中的參量說明表中宣告的識別符號具有函式原型作用域
檔案作用域
在所有塊和類的外部宣告的識別符號(全域性變數)具有檔案作用域
類作用域
類的成員具有類作用域
具有不同作用域的變數可以同名,如test02:
//test02.cpp#include int i=0;
void main()
cout<
編譯器並未給出錯誤資訊。
作用域與可見性並不是同一概念,具有作用域不一定具有可見性,而具有可見性一定具有作用域。
在test02中,float i的使用使全域性int i失去可見性,這種情形被稱作隱藏(override)。但這並不意味著int i失去了作用域,在main()函式執行過程中,int i始終存在。
有一種辦法來引用這丟了名份的全域性i,即使用c++提供的作用域訪問操作符::,它表示引用的變數具有檔案作用域,如下例程:
//test03.cpp
#include enum ;
char i = boy;
void main()
cout << "i am a " << (i ? "girl." : "boy.");
} i=0.01
i am a girl.
在上例中,通過::操作符,第8行語句偷偷地改寫了i所屬的性別。更妙的是,::之前還可以加上某些類的名稱,它表示引用的變數是該類的成員。
5. new delete
許多c使用者肯定不會忘記alloc()和free()函式族,它們曾經為動態
記憶體分配與釋放的操作做出了很大的貢獻,如:
輕輕鬆鬆編譯核心
輕輕鬆鬆編譯核心 徐永久發表於 2002年09月10日 22 31。曾經重新編譯核心是一件多麼複雜的事情,很多人都會有這樣的恐懼感。然而,看完本文以後,希望你會感到一身輕鬆,原來核心的編譯可以如此簡單。一 公升級核心的原因 公升級的原因有很多,例如新的硬體驅動,去除核心 bug 一般而言新核心會比舊...
輕輕鬆鬆打包MeeGo的QT程式
打包meego的qt程式是程式設計師的快樂時光,看到自己的成果馬上要發布了,多少天開發的勞累,多少天的抓耳撓腮的痛苦,都在此時化為美麗的故事。rpm包是meego最為常用的安裝包,本篇部落格以rpm包為基礎,講述如何在這快樂時光中,輕輕鬆鬆打包meego的qt程式。小結 rpm打包方法和工具有很多,...
linux環境之 輕輕鬆鬆背單詞
a.sudo apt get install libgtk2.0 0 libgtk2.0 dev libesd0 dev esound2 安裝應用程式 a.tar jzvf reciteword 0.8.4.tar.bz2 b.configure prefix usr local c.sudo ma...