一、類型轉換
1、強制類型轉換::類型不同,而且不屬于基本數據類型(int double...)時,經常需要強制類型轉換
①、顯示強制類型轉換
TYPE b = (TYPE) a;
C++中強制類型轉換函數有4個:
const_cast(用于去除const屬性),
static_cast(用于基本類型的強制轉換),
dynamic_cast(用于多態類型之間的類型轉換),
::dynamic_cast < type-id > ( expression ) 該運算符把expression轉換成type-id類型的對象。Type-id必須是類的指針、類的引用或者void*; 如果type-id是類指針類型,那么expression也必須是一個指針,如果type-id是一個引用,那么expression也必須是一個引用。 dynamic_cast主要用于類層次間的上行轉換和下行轉換,還可以用于類之間的交叉轉換。
reinterpreter_cast(用于不同類型之間的指針之間的轉換,最常用的就是不同類型之間函數指針的轉換)。
2、隱式強制類型轉換
自動類型轉換分兩種情況:
①,不同類型的數據進行運算時,系統會自動將運算優先級別低的轉換成級別高的,結果和運算級別高的數據類型一樣。
②,賦值運算符兩邊類型不一樣時,系統會自動將右側表達式的類型轉換成左側的變量類型,然后再賦值
3、不允許的經過轉換構造函數進行的隱式轉換的發生。explicit 不能AAA = XXX
二、靜態static
1 靜態數據成員的類型可以是其所屬類而非static 數據成員只能被聲明為該類的對象的指針或引用例如
class Bar {
public:
private:
static Bar mem1; // ok
Bar *mem2; // ok
Bar mem3; // 錯誤
};
2 靜態數據成員可以被作為類成員函數的缺省實參而非static 成員不能例如
extern int var;
class Foo {
private:
int var;
static int stcvar;
public:
// 錯誤: 被解析為非 static 的 Foo::var
// 沒有相關的類對象
int mem1( int = var );
// ok: 解析為 static 的 Foo::stcvar
// 無需相關的類對象
int mem2( int = stcvar );
// ok: int var 的全局實例
int mem3( int = ::var );
};
靜態成員函數::靜態成員函數的聲明除了在類體中的函數聲明前加上關鍵字static 以及不能聲明為const 或volatile 之外與非靜態成員函數相同
(1)、出現在類體外的函數定義不能指定關鍵字static
(2)、靜態成員函數沒有this 指針
(3)、訪問時用類::標識
三、修飾符
1、const
①、對類型 限定為常量
②、作為函數參數 限定參數不可改變或成員變量不變
2、typedef
①、類型的類別,不是簡單的宏替換
②、定義結構體struct放在前面
3、static
.........
4、inline
內聯函數:用來消除函數調用時的時間開銷。它通常用于頻繁執行的函數。 一個小內存空間的函數非常受益。
5、extern
聲明函數或者變量,讓在另一文件中使用
6、volatile
每次使用時重新讀取值
①. 并行設備的硬件寄存器(如:狀態寄存器)
②. 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)
③. 多線程應用中被幾個任務共享的變量
posted on 2011-11-30 20:32
Yu_ 閱讀(403)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++