青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

常用鏈接

留言簿(8)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

1、 函數(shù)設(shè)計的技巧

      函數(shù)是由函數(shù)參數(shù)、返回值和函數(shù)體3個要素組成的。

      1.1函數(shù)體設(shè)計的規(guī)則

      ·函數(shù)的功能要單一,不要設(shè)計多用途的函數(shù)

      ·函數(shù)體的規(guī)模要小,盡量控制在50行代碼以內(nèi)

      ·盡量避免函數(shù)帶有“記憶”功能。相同的輸入應(yīng)當(dāng)產(chǎn)生相同的輸出。帶有“記憶”功能的函數(shù),其行為可能是不可預(yù)測的,因為它的行為可能取決于某種“記憶狀態(tài)”

      ·要檢查輸入?yún)?shù)的有效性,還要檢查通過其他途徑進入函數(shù)體內(nèi)的變量的有效性,例如全局變量、文件句柄等

      ·用于出錯處理的返回值一定要清楚,讓使用者不容易忽視或誤解錯誤情況

      ·使用斷言捕捉不應(yīng)該發(fā)生的非法情況。不要混淆非法情況與錯誤情況之間的區(qū)別,后者是必然存在的并且是一定要作出處理的。

      ·在函數(shù)的入口處,使用斷言檢查參數(shù)的有效性(合法性)。

      1.2參數(shù)的設(shè)計規(guī)則

      ·參數(shù)的書寫要完整

void SetValue(int width, int height);//良好的風(fēng)格
void SetValue(int,int);//不良的風(fēng)格

     ·如果參數(shù)是指針,且僅作為輸入用,則應(yīng)在類型前加const,以防止它在函數(shù)體內(nèi)被修改。

void StringCopy(char *strDestination, const char *strSource);

    ·如果輸入?yún)?shù)以值傳遞的方式傳遞對象,則宜改用“const &”方式來傳遞,這樣可以省去臨時對象的構(gòu)造和析構(gòu)過程,從而提高效率。傳遞引用實際上也會產(chǎn)生臨時的指針傳遞,只是在對象的拷貝需要消耗很多時間的時候,才會考慮傳遞引用。

    ·參數(shù)的個數(shù)應(yīng)該控制在5個以內(nèi),不宜太多。

    ·盡量不要使用參數(shù)和類型不確定的參數(shù),這種風(fēng)格的函數(shù)在編譯時喪失了嚴(yán)格的類型安全檢查

     1.3返回值的設(shè)計規(guī)則

      ·不要省略返回值的類型,如果沒有返回值,設(shè)置為返回void類型。

      ·不要將正常值和錯誤標(biāo)志混在一起返回。正常值用輸出參數(shù)獲得,而錯誤標(biāo)志用return語句返回

2、 宏定義的使用技巧

      宏定義了一個代表特定內(nèi)容的標(biāo)識符。預(yù)處理程序會把源代碼中出現(xiàn)的宏標(biāo)識符替換成宏定義時指定的值

       2.1防止頭文件不被重復(fù)包含

#ifndefine _INCLUDER_HEADER_H_
#define _INCLUDER_HEADER_H_
#include 
*public.h
#endif

       該段代碼的作用防止了public.h被工程重復(fù)包含

       2.2定義代表某個值的全局符號

       比如,用預(yù)處理指令#define聲明一個常數(shù),用以表明一年中有多少秒

 #define SECONDS_PER_YEAR (60*60*24*365)UL //定義帶參數(shù)的宏

寫一個宏,這個宏輸入兩個參數(shù)并返回較小的一個:

   #define MIN(A,B) ((A)<=(B)?(A):(B))

       2.3_DEBUG宏的運用技巧

       _DEBUG是編譯器留給我們的預(yù)編譯屬性。如VC編譯器,對于每個工程都有Debug和Release兩種不同的模式。在Debug模型下面,_DEBUG會被編譯器自動定義,在Release模式下則不會。因此我們可以使一段程序產(chǎn)生不同的輸出,如:


#ifdef _DEBUG
cout
<<”debug”<<endl;
#else
cout
<<”release”<endl;
#endif

       這在大型工程中是十分有用的,比如有一個程序要求用戶交互輸入50個數(shù)據(jù),然后根據(jù)輸入計算出結(jié)果。如果調(diào)試時每次手動輸入50個數(shù)據(jù)是很辛苦的,也是容易出錯的,所以我們可以在調(diào)試的時候把數(shù)據(jù)指定好,而發(fā)行的時候顯示交互窗口,這樣做既不改變程序結(jié)構(gòu),又方便調(diào)試。

#ifdef _DEBUG
for(i=0;i<50;i++)
A[i]
=i
#else
ShowInputWindow(A);
#endif

3、 const使用技巧

        const是constant的縮寫,“恒定不變”的意思。被const修飾的東西都受到強制保護,可以預(yù)防意外的變動,能提高程序的健壯性。鑒于其有這么多優(yōu)點,const關(guān)鍵字最常用的是用來定義常量。const更大的魅力是它可以修飾函數(shù)的參數(shù)、返回值和函數(shù)的定義體。

      3.1 const常量的定義

      常量是一種標(biāo)識符,它的值在運行期間恒定不變,在上一節(jié)中,闡述#define定義的常量,稱為宏常量。那么利用const定義的常量稱為const常量。合理地利用常量可以提高程序的可讀性、易修改性等。

      3.2 const常量的定義技巧           

      ·盡量用含義直觀的常量來表示那些將在程序中多次出現(xiàn)的數(shù)字或字符串

const int MAX=100;//C++語言的const常量
const float PI=3.1415926

      ·需要對外公開的常量放在頭文件中,不需要對外公開的常量放在定義文件的頭部。為便于管理,可以把不同模塊的常量集中存放在一個公共的頭文件中。

      ·如果某一常量與其他常量密切相關(guān),應(yīng)在定義中包含這種關(guān)系,而不應(yīng)給出一些孤立的值。

const float RADIUS=100;
const float DIAMETER=RADIUS*2

      3.3 const在函數(shù)中的使用

            3.3.1 const修飾函數(shù)參數(shù)

            ·被const修飾的輸入?yún)?shù),在函數(shù)中不能修改它的值,防止意外的變動發(fā)生,能加強函數(shù)的健壯性。

            ·作為返回值使用,說明函數(shù)的返回值是不能被修改的。在取得返回值時應(yīng)用const int a=func()

            ·const修飾類成員函數(shù)體

            const修飾的函數(shù)體稱為常函數(shù),說明函數(shù)是不能修改類中成員的值的,不過只能用于修飾類的成員函數(shù)中。

            3.3.2 實例代碼

/**//**********************************/
/**//*說明:演示const在函數(shù)中的作用
/*const:修飾參數(shù)
/*const:修飾返回值
/*const:修飾函數(shù)體
/*********************************
*/

#include
<iostream.h>
#include
<assert.h>
//const輸入修飾輸入?yún)?shù),在函數(shù)中不能修改它的值,防止意外的變動發(fā)生,能加強函數(shù)的健壯性
char* StringCopy(char *strDestination,const char *strSource)
{
    assert((strDestination
!=NULL)&&(strSource!=NULL));
    
char* address=strDestination;
    
while((*strDestination++=*strSource++)!='\0')
        NULL;
    
return address;
}

//const修飾返回值
const char *GetString(void)
{
    
char* szOut="日期輸出結(jié)束";
    
return szOut;
}

//類DTime
class DTime
{
//操作
public:
    DTime(
int iYear,int iMonth,int iDay)
    
{
        m_nYear
=iYear;
        m_nMonth
=iMonth;
        m_nDay
=iDay;
    }

    
int GetYear() const{return m_nYear;}//const修飾函數(shù)體
    int GetMonth() const{return m_nMonth;}
    
int GetDay() const{return m_nDay;}
public:
    
int m_nYear;
    
int m_nMonth;
    
int m_nDay;
}
;

int main()
{
    
char szOutStr[256];
    
char* szInStr="輸入年月日";
    StringCopy(szOutStr,szInStr);
    cout
<<szOutStr<<endl;

    
int nYear;
    
int nMonth;
    
int nDay;

    cin
>>nYear;
    cin
>>nMonth;
    cin
>>nDay;

    DTime dt(nYear,nMonth,nDay);

    cout
<<dt.GetYear()<<"-"<<dt.GetMonth()<<"-"<<dt.GetDay()<<endl;
    
const char* str=GetString();
    cout
<<str<<endl;
    
return 0;
}

       3.4  const指針

      const指針有兩種格式,一種是指針常量,表示指針本身是常量,指針值不可修改,指向的內(nèi)容可以修改;另外一種是指向常量的指針,表示指向的對象是常量,指針值可以修改。

      ①     指針常量,指針本身是常量,參考代碼如下:

char ch[5]="lisi";
char* const pStr=ch;
pStr
="zhangsan";//錯誤
*pStr='W';//正確

      ②     指向常量的指針,指針值可以修改,指向內(nèi)容不可改變,參考代碼如下:

char ch[5]="lisi";
char const *pStr=ch;
pStr
="wangwu";//正確
*pStr='w'//錯誤

      3.5 類const成員變量的初始化  

      const修飾的成員變量,必須進行初始化,且不能更新。類中聲明const成員變量,只能通過初始化列表的方式生成構(gòu)造函數(shù)對成員變量進行初始化。

(代碼有問題,修改ing)

程序的運行結(jié)果為:

100:10:100

0:10:0

在程序中,聲明了如下3個常數(shù)據(jù)成員。

·const int &r;

·const int a;

·static const int b;

其中,r是常int型引用,a是常int型變量,b是靜態(tài)常int型變量。程序中對靜態(tài)數(shù)據(jù)成員b進行初始化。

構(gòu)造函數(shù)的格式如下所示:

Ext(int i):a(i),r(a)

{

}

         其中,冒號后面是一個數(shù)據(jù)成員初始化列表,它包含兩個初始化項,用逗號進行了分隔,因為數(shù)據(jù)成員a和r都是常類型的,需要采用初始化格式。

      3.6  const與宏常量的區(qū)別

            1.const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型

            編譯器可以對前者進行類型安全檢查,而對后者只能進行字符替換,沒有安全檢查,并且在字符替換時可能會產(chǎn)生意料不到的錯誤。

            2.編譯器對二者的調(diào)試

            有些集成化的調(diào)試工具可以對const常量進行調(diào)試,但是不能對宏常量進行調(diào)試。在C++程序中只使用const常量而不適用宏常量,即const常量完全取代宏常量。

4、 sizeof使用技巧       

      4.1、sizeof運算符的特點

      sizeof是一個單目的操作符,用于計算操作數(shù)的存儲大小,不過它更像是一個特殊的宏,因為它在編譯階段就已經(jīng)求值了。比如

#include <iostream.h>
void main()
{
int a=0;
cout
<<sizeof(a=3)<<endl;
cout
<<a<<endl;
}

      輸出結(jié)果為4、0而不是4、3,就在于sizeof在編譯階段處理的特性,由于sizeof不能變編譯成機器碼,所以在sizeof作用范圍內(nèi),也就是()里面的內(nèi)容也不能被編譯,而是被替換成類型。=操作符返回左操作數(shù)的類型,所以a=3相當(dāng)于int,而代碼頁被替換為:

   int a=0;
   cout
<<4<<endl;
   cout
<<a<<endl;

      4.2、sizeof的應(yīng)用技巧

        1)用于數(shù)據(jù)類型

        利用sizeof運算符計算該類型占用的字節(jié)數(shù),sizeof的使用形式為sizeof(type),數(shù)據(jù)類型必須用括號括住。

        2)用于普通數(shù)據(jù)類型的變量

        sizeof使用形式:sizeof(var_name)或sizeof var_name,變量名可以不用括號括住。如sizeof(var_name)、sizeof var_name等都是正確形式。帶括號的用法更普遍,大多數(shù)程序員采用這種形式。

        3)用于指針

       當(dāng)操作數(shù)是指針時,sizeof依賴于編譯器。例如在Microsoft C/C++6.0中,near類指針字節(jié)數(shù)為2,far、huge類指針字節(jié)數(shù)為4.(near類,far、huge類是什么?)    

       4)用于數(shù)組

       當(dāng)操作數(shù)具有數(shù)組類型時,其結(jié)果是數(shù)組的總字節(jié)數(shù)。

#include<iostream.h>
void main()
{
char ss[100]="0123456789";
int nn[100]={0};
int nSS=sizeof(ss);
int nSSFirst=sizeof(*ss);
int nNN=sizeof(nn);
cout
<<"nSS="<<nSS<<endl;
cout
<<"nSSFirst="<<nSSFirst<<endl;
cout
<<"nNN="<<nNN<<endl;
}

在VC++6.0的輸出結(jié)果

nSS=100

nSSFirst=1

nNN=400

      5)用于結(jié)構(gòu)體

      在默認(rèn)情況下,為了方便對結(jié)構(gòu)體內(nèi)的元素訪問和管理,當(dāng)結(jié)構(gòu)體內(nèi)的長度都小于處理器位數(shù)的時候,便以結(jié)構(gòu)體中最長的數(shù)據(jù)元素為對齊單位,也就是說結(jié)構(gòu)體的長度大于最長的數(shù)據(jù)元素的整數(shù)倍。如果結(jié)構(gòu)體內(nèi)存長度大于處理器的位數(shù),那么就以處理器的位數(shù)為對齊單位。但是結(jié)構(gòu)體內(nèi)類型相同的連續(xù)元素將在連續(xù)的空間內(nèi)和數(shù)組一樣        

      詳細解釋可看:http://hi.csdn.net/link.php?url=http://topic.csdn.net%2Fu%2F20100125%2F18%2F71fdb3a4-36a4-4c0f-a7ea-b9dcd13ef6ec.html

 #include<iostream.h>
struct A
{
 
char ch;
 
int n;
}
;
void main()
{
 
int n=sizeof(A);
 cout
<<"sizeof(A)="<<n<<endl;
 cout
<<sizeof(char)<<endl;
 cout
<<sizeof(int)<<endl;
}

      6)用于類

      sizeof運算符對于類的用法和對結(jié)構(gòu)體的用法是一致的。

#include<iostream.h>

class A
{
  
char ch;
  
int a;
  
int b;
}
;
class B
{

}
;
class C
{
  
static int sVale;
}
;
void main()
{
  
int n=sizeof(A);
  
int m=sizeof(B);
  
int k=sizeof(C);
  cout
<<"sizeof(A)="<<n<<endl;
  cout
<<"sizeof(B)="<<m<<endl;
  cout
<<"sizeof(C)="<<k<<endl;
}

     其中,class A中實際變量占用了9字節(jié),因為類的長度一定是最長的數(shù)據(jù)元素的整數(shù)倍,所以結(jié)果為12。對于編譯器我而言,即便類是空的,編譯器也會給出一個空間,所以sizeo(B)=1;因為靜態(tài)變量時存放在全局?jǐn)?shù)據(jù)區(qū)里面的,而sizeof只計算棧中分配的大小,所以sizeof(C)=1。

       4.3、sizeof與srtlen()的區(qū)別

      1、二者的區(qū)別

      sizeof是操作符,strlen是函數(shù)。

      sizeof可以用類型做參數(shù),strlen只能用char*做參數(shù),且必須是以“\0”結(jié)尾的

      2、實例代碼

#include<iostream.h>
#include
<string.h>
void main()
{
    
char* str=new char[100];
    cout
<<"sizeof(str)="<<sizeof(str)<<endl;
    cout
<<"strlen(str)="<<strlen(str)<<endl;
    
char s;
    cout
<<"sizeof(s)="<<sizeof(s)<<endl;
    cout
<<"strlen(&s)="<<strlen(&s)<<endl;
}

       說明:strlen返回的是實際串長,而sizeof返回的是變量占用的空間

      例 如

         memset(str, 0, sizeof(str));//用strlen和sizeof()有什么區(qū)別

         用sizeof的話,只給str所指向的內(nèi)存塊連續(xù)4個字節(jié)清0

         用strlen的話,只給str所指向的字符串全部清0

         sizeof(str)返回這個指針變量所占的內(nèi)存字節(jié)數(shù)目

         strlen(str)返回str所指向的字符串的長度


如果還想獲得更多關(guān)于《Visual C++代碼參考與技巧大全》的內(nèi)容,可點擊下面網(wǎng)址,http://www.shnenglu.com/kangnixi/archive/2010/01/13/105591.html

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美亚洲视频| 最新国产乱人伦偷精品免费网站 | 韩曰欧美视频免费观看| 久久成人综合视频| 欧美在线看片a免费观看| 红桃视频国产一区| 亚洲国产精品一区二区第四页av| 欧美福利在线观看| 一区二区激情小说| 亚洲综合色激情五月| 国产综合婷婷| 亚洲人成人一区二区在线观看| 欧美三级电影大全| 久久精品水蜜桃av综合天堂| 老牛国产精品一区的观看方式| 99精品视频免费| 亚洲淫性视频| 亚洲欧洲午夜| 亚洲一区精品电影| 亚洲国产一区二区a毛片| 99国产麻豆精品| 国产一区二区三区在线观看免费| 亚洲电影成人| 国产精自产拍久久久久久| 欧美成在线观看| 国产精品入口麻豆原神| 亚洲国产精品一区制服丝袜| 国产精品久久网| 91久久精品国产91久久性色| 国产精品一区二区男女羞羞无遮挡| 蜜桃精品一区二区三区| 国产精品久久二区二区| 亚洲国产欧美国产综合一区| 国产麻豆精品theporn| 最新日韩在线| 国内成人精品视频| 在线综合亚洲欧美在线视频| 亚洲电影观看| 久久国产精品99久久久久久老狼| 中文国产成人精品| 欧美**人妖| 免费av成人在线| 国产欧美精品日韩区二区麻豆天美| 亚洲激情成人在线| 亚洲黄色有码视频| 久久精品伊人| 久久久噜噜噜久噜久久| 国产精品亚洲综合色区韩国| 亚洲人体影院| 亚洲毛片在线观看.| 男同欧美伦乱| 欧美大片在线影院| 伊人精品在线| 久久精品夜色噜噜亚洲a∨ | 亚洲欧洲一区二区三区久久| 欧美一区二区三区免费大片| 午夜久久久久久| 国产精品高清一区二区三区| 久久米奇亚洲| 亚洲欧美一区二区三区久久| 欧美另类久久久品| 亚洲精品国产精品乱码不99 | 美脚丝袜一区二区三区在线观看 | 欧美激情网站在线观看| 在线精品观看| 男男成人高潮片免费网站| 免费成人你懂的| 亚洲国产专区校园欧美| 欧美va亚洲va香蕉在线| 亚洲国产欧美另类丝袜| aa级大片欧美| 国产精品久久久久aaaa| 亚洲尤物在线| 久久久五月天| 亚洲日韩第九十九页| 欧美精品电影| 亚洲手机在线| 久久久精品性| 亚洲欧洲精品一区| 欧美三级乱码| 午夜精品999| 你懂的亚洲视频| 亚洲精品久久7777| 国产精品99一区| 亚洲欧美日本精品| 欧美国产视频日韩| 亚洲一区二区三区高清| 国产伪娘ts一区| 麻豆成人在线播放| 一本大道av伊人久久综合| 欧美一区视频| 亚洲精品欧美一区二区三区| 国产精品成人在线观看| 久久成人在线| 亚洲美女网站| 久久久久久亚洲综合影院红桃| 亚洲第一精品福利| 国产精品女主播一区二区三区| 久久国产精品亚洲77777| 亚洲国产中文字幕在线观看| 香蕉精品999视频一区二区| 136国产福利精品导航网址应用| 欧美日韩国产精品专区| 欧美在线日韩在线| 一本色道久久综合精品竹菊| 久久中文在线| 午夜一区不卡| 一本色道久久综合亚洲精品不卡| 国产永久精品大片wwwapp| 欧美巨乳在线| 久久久久久高潮国产精品视| 中文日韩在线视频| 亚洲高清毛片| 老司机精品视频网站| 午夜精品999| 99热这里只有精品8| 永久久久久久| 国产日本欧美在线观看| 欧美日韩精品免费观看| 毛片av中文字幕一区二区| 亚洲欧美高清| 亚洲视频在线免费观看| 亚洲精品乱码| 欧美护士18xxxxhd| 老司机免费视频久久| 欧美一区二区三区男人的天堂 | 乱人伦精品视频在线观看| 亚洲精品一区二区三区99| 韩国欧美一区| 国产亚洲福利社区一区| 欧美视频在线观看 亚洲欧| 免费在线一区二区| 久久综合五月天婷婷伊人| 欧美一区二区视频在线| 亚洲一区免费网站| 亚洲永久在线| 亚洲欧美日韩国产综合精品二区| 宅男在线国产精品| 一区二区三区视频在线| 日韩一级免费观看| 99视频+国产日韩欧美| 亚洲欧洲日本mm| 亚洲精品一区二区三| av成人免费在线| 一本色道久久综合亚洲精品按摩| 亚洲精品在线看| 一区二区三区四区五区在线| 一区二区国产精品| 亚洲先锋成人| 欧美一区二区高清| 久久久国产一区二区| 巨胸喷奶水www久久久免费动漫| 久久综合久久综合久久综合| 欧美成va人片在线观看| 欧美日韩国产一区二区三区| 国产精品少妇自拍| 国内精品久久久久久久影视蜜臀| 在线观看精品视频| 亚洲精品一线二线三线无人区| 99国产欧美久久久精品| 亚洲性感激情| 久久久久久久97| 欧美激情精品久久久久久久变态 | 久久一二三区| 欧美人与性动交a欧美精品| 欧美色网一区二区| 国产欧美日韩综合一区在线观看 | 一区二区三区欧美成人| 性亚洲最疯狂xxxx高清| 久久综合给合久久狠狠色| 亚洲精品看片| 欧美在线观看视频| 欧美国产激情| 国产欧美高清| 日韩亚洲欧美在线观看| 欧美与欧洲交xxxx免费观看| 你懂的一区二区| 亚洲一区二区三区中文字幕在线| 久久精品国产99国产精品| 欧美日韩高清不卡| 国产一区二区三区在线观看免费视频| 亚洲国产人成综合网站| 亚洲欧美日韩高清| 亚洲大胆人体视频| 亚洲在线免费| 欧美日韩国产页| 一区二区在线观看av| 亚洲专区一区二区三区| 美女露胸一区二区三区| 亚洲性xxxx| 欧美国产1区2区| 在线观看国产欧美| 久久福利毛片| 亚洲免费影视| 国产精品av免费在线观看| 亚洲人精品午夜| 麻豆国产va免费精品高清在线| 亚洲小说春色综合另类电影| 欧美日韩国产麻豆| 亚洲欧洲在线观看|