1.動態記憶體分配
2.命名空間
3.強制型別轉換
4.小結
1.1 c++中的動態記憶體分配
1.2 new關鍵字與malloc函式的區別
1.3 new關鍵字的初始化
2.1 作用域與命名空間
在c語言中只有乙個全域性作用域:
c++中提出了命名空間的概念:
2.2 命名空間的定義和使用
c++命名空間的定義:
c++命名空間的使用:
使用整個命名空間:using namespace name;
使用命名空間中的變數:using name::variable;
使用預設命名空間中的變數:::variable;
示例:
#include namespace first
namespace second
; }
}int main()
;
printf("p.x = %d\n", p.x);
printf("p.y = %d\n", p.y);
return 0;
}
執行結果:
[root@bogon desktop]# g++ test.cpp
[root@bogon desktop]# ./a.out
first::i = 0
second::i = 1
p.x = 2
p.y = 3
3.1 c方式的強制型別轉換
c方式的強制型別轉換:
示例:
#include typedef void(pf)(int);
struct point
;int main()
執行結果:
[root@bogon desktop]# g++ test.cpp
[root@bogon desktop]# ./a.out
segmentation fault (core dumped)
編譯器雖然可以編譯通過,但是無法執行!
存在的問題:
問題:強制型別轉換在實際工程中是很難完全避免的!如何進行更加安全可靠的轉換?
3.2 c++的新式型別轉換
c++將強制型別轉換分為4個不同的型別:
static_cast強制型別轉換——靜態型別轉換
const_cast強制型別轉換
reinterpret_cast強制型別轉換
dynamic_cast強制型別轉換——動態型別轉換
示例:
#include void static_cast_demo()
void const_cast_demo()
void reinterpret_cast_demo()
void dynamic_cast_demo()
int main()
執行結果為:
[root@bogon desktop]# g++ test.cpp
test.cpp: in function 『void static_cast_demo()』:
test.cpp:11: error: invalid static_cast from type 『int*』 to type 『char*』
test.cpp: in function 『void const_cast_demo()』:
test.cpp:22: error: invalid use of const_cast with type 『int』, which is not a pointer, reference, nor a pointer-to-data-member type
test.cpp: in function 『void reinterpret_cast_demo()』:
test.cpp:47: error: invalid cast from type 『int』 to type 『char』
test.cpp: in function 『void dynamic_cast_demo()』:
test.cpp:54: error: cannot dynamic_cast 『pi』 (of type 『int*』) to type 『char*』 (target is not pointer or reference to class)
將出錯的幾行**注釋後:
#include void static_cast_demo()
void const_cast_demo()
void reinterpret_cast_demo()
void dynamic_cast_demo()
int main()
執行結果為:
[root@bogon desktop]# g++ test.cpp
[root@bogon desktop]# ./a.out
k = 5
j = 5
x = 2
y = 8
&x = 0x7ffd5a6a5650
&y = 0x7ffd5a6a5650
C 高階之路 8 C 繼承
c 高階之路 8.c 繼承 基礎 繼承含義 繼承指允許重用現有類去建立新類的過程。原則 乙個類派生出來的子類具有這個類的所有非私有的屬性,即繼承的子類擁有父類所有非私有屬性。特點 c 不支援多重繼承,c 類始終繼承自乙個基類 如果未在宣告中指定乙個基類,則繼承自system.object 注意 派生...
8 C 中的拼接字串
用sprintf 函式將乙個變數從int型別轉換到字串型別。為了正確地完成這個任務,你必須確保證目標緩衝區有足夠大空間以容納轉換完的字串。此外,還必須使用正確的格式化符。如果使用了不正確的格式化符,會導致非預知的後果。下面是乙個例子 int n 10000 chars 10 sprintf s,d ...
C 10 C 中的新成員
變數申請 type pointer new type 堆空間中單個記憶體單元申請 delete pointer 釋放 pointer 所指向的單個記憶體單元陣列申請 type pointer new type n 堆空間中連續 n 個記憶體單元申請 delete pointer 釋放 pointer...