C語言和C++的區別


藍色標注為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

  using namespace std;

  void test(int a = 1)

  {

  cout << a << endl;

  }

  int main()

  {

  test();

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

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

  }

  而缺省參數是分為兩類的,一類是全缺省,一類是半缺省。

  首先是全缺省,全缺省參數所有參數都有默認值,如果沒有手動傳參,那么編譯器會使用默認參數列表中的參數。但是這里值得注意的是,如果傳參的時候只傳了部分參數,那么該值會被從左至右匹配。

  代碼示例:

  #include

  using namespace std;

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

  {

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

  }

  int main()

  {

  test();//1 2 3

  test(10);//10 2 3

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

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

  return 0;

  }

  半缺省參數代碼演示:

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

  {

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

  }

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

  {

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

  }

  其中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)。借助重載,一個函數名可以有多種用途。

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

  #include

  using namespace std;

  //交換 int 變量的值

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

  int temp = *a;

  *a = *b;

  *b = temp;

  }

  //交換 float 變量的值

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

  float temp = *a;

  *a = *b;

  *b = temp;

  }

  //交換 char 變量的值

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

  char temp = *a;

  *a = *b;

  *b = temp;

  }

  //交換 bool 變量的值

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

  char temp = *a;

  *a = *b;

  *b = temp;

  }

  int main(){

  //交換 int 變量的值

  int n1 = 100, n2 = 200;

  Swap(&n1, &n2);

  cout<

  //交換 float 變量的值

  float f1 = 12.5, f2 = 56.93;

  Swap(&f1, &f2);

  cout<

  //交換 char 變量的值

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

  Swap(&c1, &c2);

  cout<

  //交換 bool 變量的值

  bool b1 = false, b2 = true;

  Swap(&b1, &b2);

  cout<

  return 0;

  }

  運行結果:

  200, 100

  56.93, 12.5

  B, A

  1, 0

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

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

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

  函數的重載的規則:

  函數名稱必須相同。

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

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

  6、指針和引用

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

  以傳值方式,在函數調用過程中會生成一份臨時變量用形參代替,最終把實參的值傳遞給新分配的臨時形參。它的優點是避免了函數調用的副作用,卻無法改變形參的值。如果要改變實參的值,只能通過指針傳遞。

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

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

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

  int &num1=num0;

  引用特性;

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

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

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

  //指針和引用的區別

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

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

  引用的大小是所指向的變量的大小,因為引用只是一個別名而已;指針是指針本身的大小,4個字節。

  指針和引用可參考博客:

  

  7、命名空間

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

  8、輸入與輸出

  cout代表c++的輸出流

  cin代表c++的輸入流

  它們都是在頭文件“iostream”中定義。

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

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

  如:cout<

  #include

  using namespace std;

  int main()

  {

  int a,b;

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

  cin>>a>>b;

  cout<<"輸出a的值"<

  return 0;

  }

C語言入門教程及視頻C語言編程基礎
http://www.makeru.com.cn/live/1758_311.html?s=143793
C語言 數組和字符串
http://www.makeru.com.cn/video/2238_12037.html?s=143793
C語言 指針專題一
http://www.makeru.com.cn/video/2239_12043.html?s=143793
C語言可控制led燈
http://www.makeru.com.cn/live/1392_304.html?s=143793


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM