亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

2019-11-17 05:33:17
字體:
來源:轉載
供稿:網友
二、挑戰#define

#define是C提供的一條很有用的指令,但在C++中,很有可能杜絕宏指令的使用。

1 .const

宏指令答應用戶指定某一標識符的值作為一個常量,如:

#define PI 3. 1415926

它也可以用來定義字符串:

#define HZK16 "HZK16F"

以下使用可以通過:

cout << "PI is“<<PI;cout << "Filename: "<< HZK16;

但宏究竟不是一個合法的對象,雖然它偽裝得很完美。C++為用戶提供了常量修飾符const,可以指定某個對象的值為常量。它阻止用戶對其進行賦值或其它副作用,類似于上例:

const float PI=3.1415926;char*const HZK16="HZK16F";PI = 3. 14; //errorHZK16="HZK16K"; //error: Cannot modify a const object

但對于指針的處理似乎有些復雜,例如以下使用卻又合法:

HZK16[5]=’r’; //ok HZK16 ="HZK16K"

清楚地了解const修飾的范圍很有必要,如下是聲明形式與相應含義:

char*const cpl="I love you!“; //const修飾’*’,cp1是一個指向字符的指針常量

const char*cp2="I hate you!“; //const修飾’char' cp2是一個指向字符常量的指針

const char*const cp3="Get the hell out of here!“; // const分別修飾’char’和’*’,cp3是一個指向字符常量的指針常量

因此,以下使用仍合法:

strcpy(cpl "Oh no...“);

cp2++;

因為cpl只管盯住某一處的地址不放,而阻止其中的內容不被改寫則不是它的責任,cp2則恰恰相反,它不答應你修改其中的內容,卻可以被你指來指去(這個下場可能更慘)。只有使用兩個修飾符(如cp3)才可能是最保險的辦法。

指向const的指針不能被賦給指向非const的指針:

float*p=&PI;

//error: Cannot convert 'const float*’ to 'float*’

*p=3.14;

這條限制保證了常量的正當含義。但注重由顯式轉換所引起的常量間接修改是可能的:

//test08.cpp#include <iostream.h>void main(){ char * Spy; const char * const String = "Yahoo!"; Spy = (char*)String; Spy[5] = '?'; cout << String;} Yahoo!

**作者按:以上程序在Visual C++下運行會報內存錯誤。

2.內聯函數(in line function)

宏在某些場合能得到類似于函數的功能,如下是一個常見的例子:

#define ADD (a b) ((a)+(b))

cout<<”1+2=”<

它將實現數據求和功能而輸出:

但我們至少有一打理由拒絕使用它,以下是最明顯的:

①宏缺少類型安全檢測,如:

ADD ('A' 0. 0l);

這樣的調用將被解釋為合法,而事實上,很少的用戶期望能寫出這樣的語句;

②宏不會為參數引入臨時拷貝,如:

#define DOUBLE (x)((x)+(x))int i(1);cout<<DOUBLE(i++); //

③宏不具有地址,例如可能在一個計算器程序中有:

case ' +':
Operator = & ADD;

并不能得到合理解釋。

采取函數?然而,使用函數并不是最劃算的支出,它浪費了寶貴的執行時間。使用過匯編語言的讀者可能知道,一般函數執行真正的函數體前后,要做一些現場保護工作,當函數體積很小時,這種冗余的工作量將會遠遠大于函數本身。

為此,C++提供了要害字inline,當用戶希望編譯器將某函數的代碼直接插入到調用點時,可將其設置成inline函數,即在函數定義時加上要害字inline,如:

//test09.cpp#include <iostream.h>inline int Add (int a int b){return a + b;}void main O){cout<<"1+2=“<<Add(1 2);
}


主函數將被編譯器解釋為:

count<<"1+2=”<<{1+2 };

其行為完全類似于前例的ADD (a b)宏。經驗表明,將使用頻繁而且體積很小的函數聲明為inline是明智的。

3.函數重載(overload)

在實際數據求和操作時,如上節內容中提供的Add()函數是遠遠不夠的,你不得不再添加一些其它代碼,如:

double AddDouble(double a double b){return a + b;}float AddFloat (float a float b ){return a + b;}

非凡地,在C++中你可以玩弄名字的技巧,將以上的AddDouble AddFloat皆取名為Add,如:

double Add(double a double b){return a + b;}

盡管放心,編譯器會安全地為不同的調用形式找到相應的函數原型。如:

double a b;Add(f 2); //int Add(int int)Add (a b); //double Add (doubledouble)

這樣,不同的函數擁有相同的函數名,即函數重載。函數重載以及后面的模板、虛函數機制形成了“一個接口,多種功能”的特性,即多態性(polymorphism),它是面向對象(OO)的技術之一。

在使用重載機制時,C++提出了許多防止二義性的限制,如:

void fun(int a);int fun(int a);void fun(int& a);void fun (int a int b=0);

很可能引起C ++編譯器的恐慌,它在碰到諸如fun(100)的調用時會十分不滿。用戶有義務保證任一調用形式不產生二義性。以下是一種常見的使用重載機制的例程:

//test10.cpp#include <graphics.h>#include <iostream.h>void Pixel(int x int y int color){ putpixel(x y color);} int Pixel(int x int y){ return getpixel(x y);} void main(){ int Driver=VGA Mode=VGAHI; initgraph(&Driver &Mode ""); Pixel(100 100 4); int Color = Pixel(100 100); closegraph(); cout << "Color of point(100 100):" << Color;}

可以想象C++將以上不同的Pixel()函數分別編碼為Pixel_iii和Pixel_ii,它的形式包含了各入口參數的數據類型。注重,編碼未包含返回值的信息,因而依靠于返回值類型的差異的函數重載是不穩定的。因此,連接器(linker)可以毫不費力地找到相應的模塊。但這對于新舊C版本產生的模塊連接恐

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人精品一区| 中文字幕国产亚洲| 色综合伊人色综合网站| 欧美午夜www高清视频| 欧美日韩视频在线| 中文字幕精品久久久久| 欧美成人黑人xx视频免费观看| 欧美一区视频在线| 91在线免费看网站| 日韩中文在线中文网在线观看| 亚洲欧美激情另类校园| 精品久久久av| 亚洲黄色www| 亚洲精品福利免费在线观看| 日韩在线高清视频| 国产成人高清激情视频在线观看| 性欧美亚洲xxxx乳在线观看| 欧美二区乱c黑人| 欧美成人免费全部| 午夜欧美不卡精品aaaaa| 国产a∨精品一区二区三区不卡| 九九热这里只有在线精品视| 久久99精品视频一区97| 国产91亚洲精品| 91av在线免费观看| 欧美黑人巨大精品一区二区| 欧美极品少妇xxxxⅹ裸体艺术| 欧美黑人巨大精品一区二区| 欧美日韩综合视频| 国产欧美一区二区三区在线看| 色婷婷成人综合| 亚洲最新视频在线| 欧美视频在线观看免费| 日韩av在线播放资源| 久久久久久国产精品三级玉女聊斋| 久久91精品国产| 在线日韩av观看| 一道本无吗dⅴd在线播放一区| 亚洲精品黄网在线观看| 97福利一区二区| 国产成人+综合亚洲+天堂| 亚洲国产欧美久久| 国产精品一区二区三区成人| 色午夜这里只有精品| 91av视频在线免费观看| 日韩美女中文字幕| 国产精品美女久久| 成人在线视频网| 欧美亚洲另类视频| 97在线免费视频| 人九九综合九九宗合| 在线午夜精品自拍| 68精品国产免费久久久久久婷婷| 精品人伦一区二区三区蜜桃网站| 日韩免费在线视频| 国内精品视频久久| 亚洲精品短视频| 精品露脸国产偷人在视频| 国产suv精品一区二区三区88区| 日韩va亚洲va欧洲va国产| 91久久精品国产91性色| 91精品美女在线| 国产精品久久久久久久久久免费| 狠狠干狠狠久久| 91精品久久久久| 美女精品久久久| 国内揄拍国内精品少妇国语| 日韩国产高清视频在线| 日韩理论片久久| 欧美成人全部免费| 国产精品色午夜在线观看| 国产91色在线|免| 欧美另类69精品久久久久9999| 国产日韩欧美在线| 午夜精品久久久久久久久久久久| 欧美高清videos高潮hd| 久久777国产线看观看精品| 欧美国产日韩免费| 91香蕉亚洲精品| 欧美激情精品久久久| 永久免费毛片在线播放不卡| 日韩成人av在线播放| 成人网在线视频| 国产精品一区二区三区免费视频| 精品久久香蕉国产线看观看亚洲| 久久成人在线视频| 久久久免费精品| 福利二区91精品bt7086| 亚洲色图色老头| 成人午夜激情免费视频| 久久亚洲国产精品成人av秋霞| 国产精品久久中文| 亚洲热线99精品视频| 欧美野外wwwxxx| 国产精品青青在线观看爽香蕉| 国产国语刺激对白av不卡| 国产精品96久久久久久又黄又硬| 久久精品视频99| 日韩欧美国产成人| 久久久久999| 亚洲视频专区在线| 国内精品一区二区三区四区| 日韩欧美高清在线视频| 懂色av中文一区二区三区天美| 亚洲www在线| 国产日韩在线看片| 91av在线播放视频| 中文在线资源观看视频网站免费不卡| 欧美激情视频一区二区三区不卡| 九九久久久久99精品| 日韩在线视频免费观看| 久久精品免费电影| 上原亚衣av一区二区三区| 国产精品色婷婷视频| 5566日本婷婷色中文字幕97| 欧美激情中文字幕在线| 欧美情侣性视频| 中文国产亚洲喷潮| 中文字幕国产亚洲2019| 欧美成人激情视频免费观看| 欧美在线视频a| 亚洲成人免费网站| 欧美电影免费在线观看| 国产精品毛片a∨一区二区三区|国| 国产精品亚洲片夜色在线| 亚洲 日韩 国产第一| 成人综合国产精品| 国产视频精品xxxx| 国产福利视频一区二区| 日韩电影中文字幕av| 永久免费毛片在线播放不卡| 国产精品亚洲综合天堂夜夜| 久久国产加勒比精品无码| 亚洲乱码一区av黑人高潮| 亚洲一区二区黄| 欧美精品国产精品日韩精品| 日韩精品在线免费播放| 精品偷拍一区二区三区在线看| 97视频在线观看播放| 91豆花精品一区| 亲子乱一区二区三区电影| 日韩av免费在线播放| 成人精品视频99在线观看免费| 中文字幕视频在线免费欧美日韩综合在线看| 国产欧美精品va在线观看| 亚洲精品www| 亚洲精品美女在线观看| 国产a∨精品一区二区三区不卡| 国产97色在线|日韩| 欧美激情中文网| 91av在线网站| 国产精品国内视频| www.欧美精品一二三区| 亚洲毛片一区二区| 亚洲国产一区自拍| 欧美性生交xxxxx久久久| 国产精品户外野外| 国内精久久久久久久久久人| 精品欧美国产一区二区三区| 日本高清视频精品| 亚洲18私人小影院| 欧美激情videos| 欧美野外猛男的大粗鳮| 国产精品综合久久久|