在c語言中,型別的轉換是統一的也就是 type b=(type)a,例如:int b=(int)a;在c++中就不一樣了,c++提供了四種型別轉換操作。
c++風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。
static_cast 靜態型別轉換。如int轉換成char
reinterpreter_cast 重新解釋型別
dynamic_cast 命名上理解是動態型別轉換。如子類和父類之間的多型型別轉換。
const_cast, 字面上理解就是去const屬性。
4種型別轉換的格式都是一樣的,以static_cast來進行說明為:
type b = static_cast (a)
在c++中,dynamic_cast和static_cast都是用來轉型的操作符,兩者不合理的運用可能會導致在編譯期合法的型別轉換操作卻在執行期也會引發錯誤,當轉型操作涉及到物件指標或引用時,更易發生錯誤。 這兩者又有什麼區別呢?
1、dynamic_cast操作符會在執行期對可疑的轉型操作進行安全檢查,而static_cast操作符不會進行安全檢查;
2、dynamic_cast僅對多型有效(轉型的源型別必須是多型,但與轉型的目標型別是否多型無關),而static_cast可施加與任何型別;
3、從派生類到基類的 dynamic_cast 可以進行,這稱為向上轉型;
4、從基類到派生類的 dynamic_cast 不能進行,稱為向下轉型;
5、有繼承關係,派生類可通過dynamic_cast向基類轉換;
6、沒有繼承關係,不能通過dynamic_cast互換;
關於基本型別的用法
#include
#include
using
namespace std;
//static_cast 和 reinterpret_cast 的用法
關於類的基本用法
#include
#include
using
namespace std;
// dynamic_cast用法和reinterpret_cast用法
class
animal};
class
dog:
public animal
void
doswim()
};class
cat:
public animal
void
dotree()
};class
book
void
printp()
public
:int price;};
//典型用法 把形參的唯讀屬性去掉
第十課學習
按鍵在未按下時,處於一種高電平狀態,一般這種情況下,其對io口的電平一致,則不會產生任何效果,只有在按下狀態時,由於與接地的迴路貫通,故相當於微控制器的io口直接接地。從原理圖上看,之所以要接keyin1 keyin4外接至按鍵中,主要原因是為了獲取按鍵的狀態,因為我們只能獲取微控制器的io口狀態,...
第十課 邊框
無邊框 border style none 虛線邊框 border style dotted 虛線邊框 border style dashed 實線邊框 border style solid 雙邊框 border style double 凹槽邊框 border style groove 壟狀邊框 ...
第十課 函式
第十課 函式 一.定義函式 def 函式名 引數1,引數2,文件描述 函式體return 值 def 定義函式的關鍵字 函式名 函式名指向函式記憶體位址,是對函式體 的引用。函式的命名應該反映出函式的功能 括號 括號內定義引數,引數是可有可無的,且無需指定引數的型別 冒號 括號後要加冒號,然後在下一...