天天看點

C語言和C++的差別是什麼?8個點通俗易懂的告訴你

有些初學的同學傻傻分不清其中的差別,下面我将詳細的講解C語言和C++的差別點。幫助大家盡快的了解。

1、關鍵字

藍色标注為C語言關鍵字,C++繼承了C語言的所有關鍵字,以下紅色标注為C++中含有但C語言沒有的關鍵字(根據c++98中提出C++包含63個關鍵字)

2、源檔案差別

C語言檔案字尾為.c,c++原檔案名字尾為.cpp

如果在建立源檔案時什麼都不給,預設是.cpp

3.傳回值不同

C語言中,如果一個函數沒有指定傳回值類型,預設為int類型,并傳回一個随機數,一般為0XCCCCCCCC

在C++中,如果函數沒有傳回值則必須指定為void型,否則編譯不能通過

4、參數清單

在C語言中,函數沒有指定的參數清單時,預設可接收任意多個參數

在C++中,有嚴格的參數類型檢測,沒有參數清單的函數,預設為void,不接收任何參數。

預設參數

預設參數是聲明和定義時函數的參數指定一個預設值。在調用該函數時,如果沒有指定實參則采用預設值,否則使用指定的實參。

如下代碼:

#include<iostream>

using namespace std;

void test(int a = 1)

{

cout << a << endl;

}

int main()

test();

test(10);//輸出的結果是1

return 0;//函數輸出結果是10

而預設參數是分為兩類的,一類是全預設,一類是半預設。

首先是全預設,全預設參數所有參數都有預設值,如果沒有手動傳參,那麼編譯器會使用預設參數清單中的參數。但是這裡值得注意的是,如果傳參的時候隻傳了部分參數,那麼該值會被從左至右比對。

代碼示例:

void test(int a = 1,int b = 2, int c = 3)

cout << a << " " << b << " " << c << endl;

test();//1 2 3

test(10);//10 2 3

test(10, 20);//10 20 3

test(10, 20, 30);//10 20 30

return 0;

C語言和C++的差別是什麼?8個點通俗易懂的告訴你

C/C++

半預設參數代碼示範:

void test(int a ,int b = 2, int c = 3)

void test1(int a, int b, int c = 3)

其中test函數至少傳一個參數,test1函數至少傳兩個參數,函數才可以正常運作。

注意:

帶預設值的參數必須放在參數清單的最後面。因為傳參是從右向左的。

預設參數不能同時在函數聲明和定義中出現,隻能二者留其一。

預設值必須是常量或者全局變量。

C語言并不支援預設。

5、C++支援函數重載,C語言不支援

在實際開發中,有時候我們需要實作幾個功能類似的函數,隻是有些細節不同。

例如希望交換兩個變量的值,這兩個變量有多種類型,可以是 int、float、char、bool 等,我們需要通過參數把變量的位址傳入函數内部。

在C語言中,程式員往往需要分别設計出三個不同名的函數,其函數原型與下面類似:

void swap1(int *a, int *b); //交換 int 變量的值

void swap2(float *a, float *b); //交換 float 變量的值

void swap3(char *a, char *b); //交換 char 變量的值

void swap4(bool *a, bool *b); //交換 bool 變量的值

但在C++中,這完全沒有必要。C++ 允許多個函數擁有相同的名字,隻要它們的參數清單不同就可以,這就是函數的重載(Function Overloading)。借助重載,一個函數名可以有多種用途。

C語言和C++的差別是什麼?8個點通俗易懂的告訴你

關于怎麼快速學C/C++,可以加下小編的C/C++學習企鵝群:【870+963+251】不管你是小白還是大牛,小編我都歡迎,不定期分享幹貨,歡迎初學和進階中的小夥伴。

每天晚上20:00都會開直播給大家分享C/C++遊戲程式設計學習知識和路線方法,群裡會不定期更新最新的教程和學習方法,最後祝所有程式員都能夠走上人生巅峰,讓代碼将夢想照進現實

參數清單又叫參數簽名,包括參數的類型、參數的個數和參數的順序,隻要有一個不同就叫做參數清單不同。

#include <iostream>

//交換 int 變量的值

void Swap(int *a, int *b){

int temp = *a;

*a = *b;

*b = temp;

//交換 float 變量的值

void Swap(float *a, float *b){

float temp = *a;

//交換 char 變量的值

void Swap(char *a, char *b){

char temp = *a;

//交換 bool 變量的值

void Swap(bool *a, bool *b){

int main(){

int n1 = 100, n2 = 200;

Swap(&n1, &n2);

cout<<n1<<", "<<n2<<endl;

float f1 = 12.5, f2 = 56.93;

Swap(&f1, &f2);

cout<<f1<<", "<<f2<<endl;

char c1 = 'A', c2 = 'B';

Swap(&c1, &c2);

cout<<c1<<", "<<c2<<endl;

bool b1 = false, b2 = true;

Swap(&b1, &b2);

cout<<b1<<", "<<b2<<endl;

運作結果:

200, 100

56.93, 12.5

B, A

1, 0

重載就是在一個作用範圍内(同一個類、同一個命名空間等)有多個名稱相同但參數不同的函數。重載的結果是讓一個函數名擁有了多種用途,使得命名更加友善(在中大型項目中,給變量、函數、類起名字是一件讓人苦惱的問題),調用更加靈活。

在使用重載函數時,同名函數的功能應當相同或相近,不要用同一函數名去實作完全不相幹的功能,雖然程式也能運作,但可讀性不好,使人覺得莫名其妙。

注意,參數清單不同包括參數的個數不同、類型不同或順序不同,僅僅參數名稱不同是不可以的。函數傳回值也不能作為重載的依據。

函數的重載的規則:

函數名稱必須相同。

函數的傳回類型可以相同也可以不相同。

僅僅傳回類型不同不足以成為函數的重載。

C語言和C++的差別是什麼?8個點通俗易懂的告訴你

6、指針和引用

C語言中函數傳參方式有兩種:傳值和傳址

以傳值方式,在函數調用過程中會生成一份臨時變量用形參代替,最終把實參的值傳遞給新配置設定的臨時形參。

它的優點是避免了函數調用的副作用,卻無法改變形參的值。如果要改變實參的值,隻能通過指針傳遞。

指針可以解決問題,但是不安全,是以在C++中引入了引用。

引用:引用不是新定義的一個變量,他是原變量的一個别名,編譯器不會為引用變量開辟空間,它和他引用的變量共用同一塊記憶體空間。

類型& 變量(對象名)=引用變量

int &num1=num0;

引用特性;

1、引用定義時必須初始化

2、一個變量可以有多個引用

3、引用一旦綁定一個實體就不能改變為其他變量的引用

//指針和引用的差別

引用不可以為空,但指針可以為空

引用不可以改變指向,對一個對象”至死不渝”;但是指針可以改變指向,而指向其它對象

引用的大小是所指向的變量的大小,因為引用隻是一個别名而已;指針是指針本身的大小,4個位元組。

7、命名空間

在C++中,變量、函數和類都是大量存在的,這些變量、函數和類的名稱将都存在于全局命名空間中,會導緻很多沖突,使用命名空間的目的是對辨別符的名稱進行本地化,以避免命名沖突或者名字污染,namespace關鍵字的出現就是解決這種問題。而C語言中沒有。

8、輸入與輸出

cout代表c++的輸出流

cin代表c++的輸入流

它們都是在頭檔案“iostream”中定義。

“cout”必須與”<<”一起使用,“<<”起到插入的作用。

在一條語句中可以多次使用“<<”輸出多個資料。

如:cout<

int a,b;

cout<<"請輸入a,b的值"<<endl;

cin>>a>>b;

cout<<"輸出a的值"<<a<<"輸出b的值"<<b<<endl;

繼續閱讀