C 解析 8 C 中的新成員

2022-09-17 13:51:19 字數 3004 閱讀 4734

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...