• Source
    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4.  
    5. class D1
    6. {
    7. public:
    8. int get_d1_id( ) const
    9. {
    10. return 1;
    11. }
    12. };
    13.  
    14. class D2 {};
    15. class D12: public D1, public D2
    16. {
    17. public:
    18. int get_d12_id( ) const
    19. {
    20. return 2;
    21. }
    22. };
    23.  
    24. int main()
    25. {
    26. // Examples with built-in types
    27. printf("static_cast<int>(1.0) = %d\n", static_cast<int>(1.0f));
    28. printf("static_cast<int>(0xFFFFFFFFU) = %d\n", static_cast<int>(0xFFFFFFFFU));
    29. printf("static_cast<int>(0xFF11FFFFFFULL) = 0x%X\n", static_cast<int>(0xFF11FFFFFFULL));
    30. printf("static_cast<float>(5) = %f\n", static_cast<float>(5));
    31. printf("static_cast<unsigned int>(-1) = %u\n", static_cast<unsigned int>(-1));
    32.  
    33. // Examples with user defined types
    34. D1 d1;
    35. D2 d2;
    36. D12 d12;
    37. d1 = d12; // up-cast: implicit conversion
    38. d2 = d12; // up-cast: implicit conversion
    39.  
    40. // Examples with pointer types for built-in types
    41. const char * expression = "Three dollar bill yall$";
    42. const void * p = static_cast< const void *> (expression);
    43. expression = static_cast<const char *>(p);
    44. const int * piexp = static_cast<const int *>(p);
    45.  
    46. // Examples with pointer types for user defined types
    47. D1 * pd1 = &d12; // up-cast: implicit conversion
    48. D2 * pd2 = &d12; // up-cast: implicit conversion
    49. D12 * pd12 = static_cast<D12*>(pd1); // down-cast
    50.  
    51. // Examples with references types for user defined types
    52. D1 & rd1 = d12; // up-cast: implicit conversion
    53. D12 & rd12 = static_cast<D12&>(rd1); // down-cast
    54.  
    55. // Examples with pointers to member functions
    56. typedef int (D12::*d12_int_void_cont_mem_fun_ptr)() const;
    57. typedef int (D1::*d1_int_void_cont_mem_fun_ptr)() const;
    58.  
    59. d1_int_void_cont_mem_fun_ptr d1_func_ptr = &D1::get_d1_id;
    60. printf("(d1.*d1_func_ptr)() returns %d\n", (d1.*d1_func_ptr)());
    61.  
    62. d12_int_void_cont_mem_fun_ptr d12_func_ptr = &D12::get_d12_id;
    63. printf("(d12.*d12_func_ptr)() returns %d\n", (d12.*d12_func_ptr)());
    64.  
    65. d12_func_ptr = static_cast<d12_int_void_cont_mem_fun_ptr>(d1_func_ptr);
    66. printf("(d12.*d12_func_ptr)() returns %d\n", (d12.*d12_func_ptr)());
    67.  
    68. d1_func_ptr = static_cast<d1_int_void_cont_mem_fun_ptr>(&D12::get_d12_id);
    69. printf("(d1.*d1_func_ptr)() returns %d\n", (d1.*d1_func_ptr)());
    70.  
    71. return 0;
    72. }