国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

輕輕松松從C一路走到C++系列文章之一

2019-11-17 05:33:12
字體:
來源:轉載
供稿:網友

  摘要

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 <iostream.h>//I'm a C++user!//…and C is out of date. void main(){ cout<<"Hello world!/n"; //PRints a string}

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 <iostream.h>int i=0; void main(){ cout << i << ' '; //global 'int i' visible { float i(0.01); //global 'int i' overrided cout<< i << ' '; } cout<<i<<endl; //global 'int i' visible again}0 0.01 0

編譯器并未給出錯誤信息。

作用域與可見性并不是同一概念,具有作用域不一定具有可見性,而具有可見性一定具有作用域。

在test02中,float i的使用使全局int i失去可見性,這種情形被稱作隱藏(override)。但這并不意味著int i失去了作用域,在main()函數運行過程中,int i始終存在。

有一種辦法來引用這丟了名份的全局i,即使用C++提供的作用域存取操作符::,它表示引用的變量具有文件作用域,如下例程:

//test03.cpp#include <iostream.h>enum {boy girl};char i = boy;void main(){ { float i(0.01); cout << "i=" << i << endl; ::i=girl; //modify global 'i' } cout << "I am a " << (i ? "girl." : "boy.");} i=0.01I am a girl.

在上例中,通過::操作符,第8行語句偷偷地改寫了i所屬的性別。更妙的是,::之前還可以加上某些類的名稱,它表示引用的變量是該類的成員。

5. new delete

許多C用戶肯定不會忘記alloc()和free()函數族,它們曾經為動態內存分配與釋放的操作做出了很大的貢獻,如:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 那坡县| 壤塘县| 南郑县| 贵港市| 迁安市| 杨浦区| 开江县| 新干县| 奉新县| 修文县| 澎湖县| 泊头市| 紫金县| 惠州市| 沅陵县| 荆门市| 闽清县| 德令哈市| 溆浦县| 平顺县| 万盛区| 山东省| 玉田县| 禹州市| 洪雅县| 太仆寺旗| 罗田县| 临高县| 新乡市| 礼泉县| 建阳市| 南陵县| 开封县| 锡林浩特市| 蛟河市| 任丘市| 辉县市| 偃师市| 宣城市| 普格县| 长顺县|