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

隨筆-4  評論-40  文章-117  trackbacks-0


 

相對于C,C++提供了更多的額外特性:模板、運行時類型檢查(RTTI)、命名空間、轉型運算等,
在這里只簡單介紹一下C++中的轉型運算.
C++ 草案標準包含了以下四種轉型運算:
static_cast
const_cast
dynamic_cast
reinterpret_cast.
這些新的操作目的是在彌補C風格的轉型漏洞

轉型通常用在:對象類型 表達式 函數參數 函數返回值

有些類型轉換是通過C++編譯器自動執行的,稱為隱式轉換,標準C++轉換和用戶自定義轉換通常屬于這一類
還有一些轉換,必須程序員親自干預,這一類轉換稱作顯式轉換
標準C++轉換通常用在:
integral promotions (e.g., enum to int),
integral conversions (e.g., int to unsigned int),
floating point conversions (e.g., float to double),
floating-integral conversions (e.g., int to float),
arithmetic conversions (e.g., converting operands to the type of the widest operand before evaluation),
pointer conversions (e.g., derived class pointer to base class pointer),
reference conversions (e.g., derived class reference to base class reference),
and pointer-to-member conversions.
另外還有一些用戶自定義的轉換,比如:
你可以提供一個從X類到Y類轉換的函數,參數是X,如下:
Y(const X& x)
或者是一個轉換操作:
operator X()

當一個表達式需要一個不能通過陰式轉換得到的類型,或者這種轉換會產生歧義時,程序員必須顯式表明轉換的目的。

C風格轉換最大的缺點在于,這種轉換完全根據程序員的經驗進行,轉換是否成功沒有提示,更可怕的是有時這種轉換
會帶來災難性的后果。

C++轉型運算目的在于彌補C風格轉換造成的漏洞,它有如下有點:
1。語法清晰、準確甚至是有點啰嗦的語法,使得轉換更容易被理解,易于發現,易于維護
2。轉換目的明確,使得編譯器可以輕松判斷轉換是否恰當
3。類型安全:允許某些運行時轉換,程序員可以檢查這種轉型成功與否

C++提供了以下四種轉型運算:
1。const_cast
從一種類型中添加或者移除const 或 volatile 性質
示例1:
void f(double& d)
{
}
void g(const double& d)
{
f(d);
}
如果在g中調用f(d)會產生變異錯誤,可以:
void g(const double& d)
{
f(const_cast<double&>(d));
}
示例2:

class B
{
public:
B() {}
~B() {}
void f() const;
private:
int _count;
};
在這個類中f()被聲明為const,表示他告訴編譯器調用這個函數不會改變對象的值,
void B::f()const
{
_count+=1; //error
}
如果我們一定要改變_count的值該怎么辦呢?
void B::f() const
{
B* const localThis = const_cast<B* const>(this);
localThis->_count += 1;
}
事實上針對這種情況C++提供了一個新的關鍵字:mutable,用來標志那些可以被聲明了const的
函數更改的成員變量,這里可以:
mutable int _count;

2。reinterpret_cast
這種轉換可以在兩個互不相干的類型之間進行,例如你可以將一個整數轉換成一個指針,或
將一個指針轉換成一個整數。

3。static_cast
靜態類型轉換,這是最常用的一種轉換,基本上取代了C風格的轉換,這種轉換依賴于編譯時信息,
所以被稱作靜態轉換,例如:可以從繼承類轉換到基類。

4。dynamic_cast
動態類型轉換,這種轉換依賴于運行時信息,實際上它是RTTI的一部分。轉換可能會不成功,如果不成功
返回NULL.

有關static_cast 和 dynamic_cast 的詳細說明,可參閱msdn,以下我將用一個示例來說明:

示例3:
在銀行系統中,假設存在兩種賬號:支票賬號和現金帳號,他們都有存款操作,但是這兩種操作是不同的。
假設他們都繼承自賬號類,如下:
class CAccount
{
virtual void Saveing();
}
class CPaperAccount : public CAccount
{
virtual void Saveing();
}
class CCashAccount : public CAccount
{
virtual void Saveing();
}
系統要在運行時動態的判斷是哪種賬號,然后調用相應的Saveing()函數,該如何處理呢?

void Save(CAccount* pAcc)
{
CPaperAccount *p1 = dynamic_cast<CPaperAccount*>(pAcc);
if(p1)
{
p1->Saveing();
}
CCashAccount *p2 = dynamic_cast<CCashAccount*>(pAcc);
if(p2)
{
p2->Saveing();
}
}
void main()
{
CCashAccount *pCashAcc = new CCashAccount();
Save(pCassAcc);
}
在save函數中不可以使用static_cast


 

 

posted on 2008-05-07 13:35 李陽 閱讀(271) 評論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 一区二区三区高清视频在线观看| 国产精品夜夜嗨| 欧美国产一区在线| 久久高清国产| 午夜久久久久久久久久一区二区| 亚洲在线播放| 老司机精品福利视频| 在线视频你懂得一区| 国产伊人精品| 国产精品久久久久国产精品日日| 久久综合福利| 一区二区三区毛片| 亚洲国产综合视频在线观看| 亚洲女女女同性video| 亚洲精品1区| 在线不卡视频| 国产一区二区三区精品久久久| 欧美日韩国产一区精品一区| 裸体女人亚洲精品一区| 久久精品欧美日韩精品| 亚洲男人的天堂在线aⅴ视频| 亚洲三级国产| 亚洲国产欧美另类丝袜| 欧美高清你懂得| 久久这里只有精品视频首页| 欧美在线观看视频在线| 欧美在线播放高清精品| 久久丁香综合五月国产三级网站| 亚洲一区视频| 一区二区三区产品免费精品久久75 | 久久一区视频| 久久精品免费电影| 久久精品国产久精国产思思| 欧美亚洲在线| 欧美一区二区三区在| 欧美一区二区大片| 久久99在线观看| 久久精品视频va| 狂野欧美一区| 欧美国产精品劲爆| 亚洲欧洲另类国产综合| 日韩午夜视频在线观看| 亚洲午夜视频在线| 久久成人一区| 欧美成人亚洲| 欧美视频在线不卡| 国产乱肥老妇国产一区二| 国产欧美日韩在线播放| 狠狠88综合久久久久综合网| 亚洲国产成人精品久久| 日韩午夜电影在线观看| 亚洲午夜91| 久久婷婷久久一区二区三区| 亚洲精品日韩在线| 老司机精品视频一区二区三区| 久久国产精品99国产| 久热精品视频在线观看| 美女精品国产| 欧美日韩精品欧美日韩精品| 欧美午夜在线观看| 欧美新色视频| 黄色成人在线| 一本大道久久a久久精二百| 香蕉国产精品偷在线观看不卡| 欧美在线观看一区二区| 亚洲二区视频在线| 亚洲影院色无极综合| 久久久亚洲高清| 欧美午夜精品久久久久久久| 在线观看国产精品网站| 中日韩在线视频| 久久资源在线| 一本久道久久综合中文字幕| 欧美一级片久久久久久久| 欧美国产在线观看| 国外精品视频| 亚洲网站啪啪| 欧美电影在线免费观看网站| 亚洲专区一区二区三区| 欧美黑人国产人伦爽爽爽| 国产深夜精品福利| 一区二区三区视频观看| 美女尤物久久精品| 亚洲女同在线| 欧美日韩国产一中文字不卡| 亚洲第一黄网| 久久久久久999| 午夜激情亚洲| 欧美午夜一区二区三区免费大片| 亚洲国产网站| 免费在线一区二区| 欧美一区二区三区久久精品| 国产精品久久久久久久久果冻传媒| 亚洲精品乱码久久久久久蜜桃91| 久久精品在线观看| 亚洲主播在线| 国产精品日韩一区二区| 一卡二卡3卡四卡高清精品视频| 欧美国产亚洲视频| 久久久久久久久一区二区| 国产综合久久久久久鬼色| 午夜精品久久| 亚洲综合精品自拍| 欧美日一区二区在线观看| 日韩特黄影片| 亚洲日本欧美日韩高观看| 你懂的亚洲视频| 亚洲欧洲精品一区二区三区不卡 | 久久久国产精品亚洲一区 | 欧美高清视频在线| 久久久久国产精品午夜一区| 国产精品视频观看| 亚洲欧美色婷婷| 亚洲主播在线观看| 国产女主播视频一区二区| 久久精品av麻豆的观看方式| 午夜宅男久久久| 国内精品久久久久久久97牛牛| 久久久精品五月天| 美女爽到呻吟久久久久| 亚洲免费观看| 一区二区三区欧美| 国产偷久久久精品专区| 久久综合九色九九| 欧美成人福利视频| 亚洲制服av| 久久国产欧美精品| 国产日韩欧美在线| 久久久久欧美精品| 久久精品国产综合精品| 影院欧美亚洲| 亚洲电影免费在线观看| 欧美日韩一区二区高清| 亚洲一区二区三区高清不卡| 亚洲欧美激情四射在线日 | 久久av在线看| 亚洲第一福利社区| 亚洲高清免费| 国产精品老牛| 久久全球大尺度高清视频| 欧美国产视频日韩| 欧美一区二区三区免费观看| 欧美在线视频一区| 亚洲欧洲日本一区二区三区| 亚洲美女视频在线免费观看| 欧美三日本三级三级在线播放| 久久爱www.| 欧美第一黄网免费网站| 欧美一区二区在线免费播放| 久久最新视频| 性欧美大战久久久久久久免费观看 | 西瓜成人精品人成网站| 久久精品国产99国产精品| 最新高清无码专区| 亚洲私人影院| 亚洲黄色毛片| 亚洲欧美日韩国产一区二区三区| 精品88久久久久88久久久| 99精品视频一区二区三区| 在线电影院国产精品| 欧美国产一区二区| 亚洲人成精品久久久久| 午夜国产精品视频| 亚洲精品看片| 欧美一级精品大片| 香蕉精品999视频一区二区| 欧美日韩国产精品一卡| 欧美高清视频一区| 国产婷婷精品| 亚洲免费黄色| 亚洲黄色影片| 久久国产欧美| 久久久99爱| 国产精品国产一区二区| 亚洲国产视频一区| 国产精品一区二区欧美| 99国产精品久久| 亚洲美女av网站| 老司机精品视频一区二区三区| 欧美一级精品大片| 国产精品久久激情| 99在线精品视频在线观看| 一区二区精品在线| 欧美精品三级在线观看| 亚洲日本视频| 亚洲视频 欧洲视频| 欧美性开放视频|