C 語言對C語言的擴充套件 一

2021-10-25 05:08:50 字數 4502 閱讀 9979

概述:眾所周知c++語言是物件導向語言,而c語言是面向過程語言,過程和物件語言有什麼主要區別呢?

面向過程

1.8 c++對c的乙個重要擴充套件——引用

面向過程:

面向過程是一種以過程為中心的程式設計思想。 通過分析出解決問題所需要的步驟, 然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。 面向過程程式設計思想的核心:功能分解,自頂向下,逐層細化(程式=資料結構+算 法)。

物件導向:

在物件導向中,演算法與資料結構被看做是乙個整體,稱作物件,現實世界中任何類 的物件都具有一定的屬性和操作,也總能用資料結構與演算法兩者合一地來描述。但是實現了模組化,便於以後的開發維護等工作。

通常情況下,如果有兩個同名變數,乙個是全域性變數,另乙個是區域性變數,那麼局 部變數在其作用域內具有較高的優先權,它將遮蔽全域性變數。

注:對於同名的區域性變數和全域性變數,對區域性變數來說在他作用域中有著一定的優先權,訪問的時候不會訪問到全域性變數;加上全域性變數作用域便可消除,比如::a表示全域性變數下的a變數而不是全域性變數,所以說作用域運算子是去訪問對應作用域下的變數或者函式。

**如下:

int a =

100;

void

test01()

命名空間:在 c++中,名稱(name)可以是符號常量、變數、函式、結構、列舉、類和物件 等等。工程越大,名稱互相衝突性的可能性越大。另外使用多個廠商的類庫時,也 可能導致名稱衝突。為了避免,在大規模程式的設計中,以及在程式設計師使用各種各 樣的 c++庫時,這些識別符號的命名發生衝突,標準 c++引入關鍵字 namespace(命 名空間/名字空間/命名空間),可以更好地控制識別符號的作用域。

命名空間的使用**如下:

int a =23;

int b =28;

namespace test_space

}void

test()

/*全域性變數中定義函式和變數*/

void

test01()

注:

1,命名空間是開放的,即可以隨時把新的成員加入已有的命名空間中,。

2,命名空間只能全域性範圍內定義

3,命名空間可巢狀命名空間

4,當然宣告和實現可以分開

5,無名命名空間(只有關鍵字namespace),意味著命名空間中的識別符號只能在本檔案內訪問,相當於給這個標 識符加上了 static,使得其可以作為內部連線

using 宣告可使得指定的識別符號可用

namespace a

void

funcb()

}void

test()

注:當using宣告遇到函式過載的時候如果命名空間包含一組用相同名字過載的函式,using 宣告就宣告了這個過載函式 的所有集合

#include

int a =10;

/*當做定義*/

int a;

/*c語言中當做宣告(沒有賦值)*/

intmain()

/*c語言編譯器可以通過編譯*/

/*但是c++編譯器無法通過編譯,會出現重定義的報錯*/

在c語言中struct中不能出現函式,並且在定義變數時候需要加上關鍵字struct

但是在c++中完全可以加上函式內容,以及定義變數時候不需要寫struct(要是真的想要在c語言struct裡面存在函式只能放函式指標)

struct test_s 

;void

test()

在c++中可以放函式體內容

struct test_s 

};

標準 c++的 bool 型別有兩種內建的常量 true(轉換為整數 1)和 false(轉換為整數 0) 表示狀態。這三個名字都是關鍵字。 bool 型別只有兩個值,true(1 值),false(0 值) bool 型別佔 1 個位元組大小 給 bool 型別賦值時,非 0 值會自動轉換為 true(1),0 值會自動轉換 false(0)

void

test()

const

int a =10;

//不要把a看成常量

//a的本質 是變數 只是 唯讀變數

//c語言的const修飾全域性變數 預設是(外部鏈結的) 

const

int num =

100;

//唯讀的全域性變數 記憶體放在文字常量區(記憶體空間唯讀)

extern

const

int num;

//對fun.c中的num進行宣告(不要賦值)

extern

const

int num;

void

test()

總結:在c語言中

1、const修飾全域性變數num 變數名唯讀 記憶體空間在文 字常量區(唯讀)、不能通過num的位址 修改空間內容

2、const修飾區域性變數data 變數名唯讀 記憶體空間棧區 (可讀可寫),可以通過data位址 間接的修改空間內容

struct test_s 

;void

test()

; test_s* p2 =

(test_s*

)&s;

p2->a =

1000

; p2->b =

10000

; cout << s.a << endl;

cout << s.b << endl;

/*會改變對應資料的值*/

c++總結

1、const int data = 10;//data先放入符號表

2、如果對data取位址 系統才會給data開闢空間

3、const int a = b;//b是變數名 系統直接給a開闢空間 而 不放入符號表

4、cosnt 修飾自定義資料 系統為自定義資料開闢空間

1,const有相對應的型別可以方便編譯器檢查語法錯誤,而define沒有型別

2,const注重作用域,而define是整個檔案結束

概述:在c語言和c++語言中對指標的概念以及使用都一樣但是c++中引入了乙個重要的應用概念也可以給函式傳遞位址,這就是按引用傳遞.都知道變數其實就是一段有名字的記憶體空間,引用就是給變數起別名,也就是給這段記憶體起別名。

基本語法:

基本語法: type& ref = val; 注意事項: &在此不是求 位址運算,而是起標識作用。

int a =

100;

/*給普通變數起別名*/

int& b = a;

/*基本語法:型別 &起的別名 = 原本的名字*/

/*注:引用必須要初始化不能直接起別名如int &b;*/

int arry[10]

=;/*給陣列起別名*/

int(

&test)[10

]= arry;

/*需要注意括號以及陣列元素*/

/*注:用typedef也可以實現對陣列起別名*/

/*函式值傳遞*/

void

test01

(int a,

int b)

/*函式指標(位址傳遞)*/

void

test02

(int

*a,int

*b)/*函式引用傳遞*/

void

test03

(int

&a,int

&b)

int

&test()

注意:不能返回區域性變數的引用。

這樣的話函式就可以作為左值來使用

int

&test()

test()

=100

;/*函式作為左值的時候,必須返回引用*/

引用的本質在 c++內部實現是乙個指標常量. type& ref = val; // type* const ref = &val; c++編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間 大小與指標相同,只是這個過程是編譯器內部實現,使用者不可見。

常量指標和指標常量的區別:

常量指標是指——指向常量的指標,由於他指向的是常量所以他指向的值不能改變,但是他的指向是可以改變的。

指標常量是指——指標本身是常量,也就是他的值不能改變,所以位址不能改變(也就是指向不能改變),但是他指向的變數的大小是可以改變的。

C語言對const的理解

教學過程中,很多同學對於const這個關鍵字的理解存在很大的誤解。現在總結下對這個關鍵字理解上的誤區,希望在以後的程式設計中,能夠靈活使用const這個關鍵字。1 const修飾的變數是常量還是變數 對於這個問題,很多同學認為const修飾的變數是不能改變,結果就誤認為該變數變成了常量。那麼對於co...

C語言 對 的一些用法

1.元素移動 題目 編寫函式move將陣列a 共有m個元素 中元素向左迴圈移位n次 源 void move int a,int m,int n 反思 如題目向右迴圈位移n次,又將如何改變?如下 void move int a,int m,int n 2.凱撒加密 題目 為了防止資訊被別人輕易竊取,需...

c 對C語言的擴充套件(一)

一 c 對c的加強 1 命名空間 為什麼要引入命名空間這個概念 乙個中大型軟體往往由多名程式設計師共同開發,會使用大量的變數和函式,不可避免地會出現變數或函式的命名衝突。當所有人的 都測試通過,沒有問題時,將它們結合到一起就有可能會出現命名衝突。例如小李和小韓都參與了乙個檔案管理系統的開發,它們都定...