一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

C語(yǔ)言

C語(yǔ)言和C++的區別

時(shí)間:2025-02-28 13:58:16 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言和C++的區別精選

  C和C++的關(guān)系:就像是win98跟winXP的關(guān)系。C++是在C的基礎上增加了新的理論,玩出了新的花樣。所以叫C加加。以下是小編為大家收集的C語(yǔ)言和C++的區別精選,歡迎大家借鑒與參考,希望對大家有所幫助。

  C語(yǔ)言和C++的區別1

  C是一個(gè)結構化語(yǔ)言,它的重點(diǎn)在于算法和數據結構。C程序的設計首要考慮的是如何通過(guò)一個(gè)過(guò)程,對輸入(或環(huán)境條件)進(jìn)行運算處理得到輸出(或實(shí)現過(guò)程(事務(wù))控制)。

  C++,首要考慮的是如何構造一個(gè)對象模型,讓這個(gè)模型能夠契合與之對應的問(wèn)題域,這樣就可以通過(guò)獲取對象的狀態(tài)信息得到輸出或實(shí)現過(guò)程(事務(wù))控制。 所以C與C++的最大區別在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因為“ 設計這個(gè)概念已經(jīng)被融入到C++之中 ”。

  下面我們一步一步來(lái)分析C++與C的不同:

  一、類(lèi),類(lèi)對于初學(xué)者,它是一個(gè)累贅。類(lèi)的封裝使得初學(xué)者對程序產(chǎn)生厭倦,感到不適和麻煩。

  二、引用,引用是C++中最好盡量不要用它,除非萬(wàn)不得已。引用對于初學(xué)者就更容易產(chǎn)生混淆,不知道哪個(gè)是引用,哪個(gè)是變量。

  三、函數的重載,初學(xué)者學(xué)函數的重載好像沒(méi)什么壞處,但是,這會(huì )使初學(xué)者潛意識里對C語(yǔ)言的變量類(lèi)型的重要性產(chǎn)生淡化,要記住C語(yǔ)言是對變量類(lèi)型最敏感了的,變量的類(lèi)型在C語(yǔ)言里的重要性是不言而喻的。

  四、流操作符,和上面同樣的道理,使得對變量類(lèi)型的重要性產(chǎn)生淡化,有時(shí)會(huì )產(chǎn)生使初學(xué)者莫名其妙的結果。

  五、操作符重載,典型的高級應用,初學(xué)者可能根本用不著(zhù),這個(gè)東東會(huì )讓他們覺(jué)得C++很難,門(mén)檻高,看不懂。

  六、繼承,以及虛函數,看起來(lái)深奧,實(shí)用價(jià)值很低。還有些東東我就不發(fā)表評論了,如:new,操作符等

  七、誤區:以問(wèn)答形式:

  問(wèn):C++是面向對象化的而C是面向過(guò)程化的?

  答:第二對,第一問(wèn)錯,C++并非完全面向對象化,真正的面向對象化的語(yǔ)言恐怕只有Java才算得上。

  問(wèn):C++能實(shí)現C所不能的功能嗎?

  答:至少我還沒(méi)有發(fā)現

  問(wèn):學(xué)了C再學(xué)C++有障礙嗎?比如程序設計思想

  答:至少我還沒(méi)有看見(jiàn)誰(shuí)有此癥狀。

  問(wèn):學(xué)了C再學(xué)C++又要重頭開(kāi)始嗎?

  答:不,C++下可以實(shí)現C語(yǔ)言的一切功能。

  問(wèn):我學(xué)完了C一定還要學(xué)C++才能編程嗎?

  答:完全沒(méi)必要。

  問(wèn):C++比C好在哪里?

  答:更加符合軟件工程學(xué)

  問(wèn):學(xué)完了C再學(xué)C++是不是很容易?

  答:那要看你是不是真正的學(xué)完了C語(yǔ)言。

  C與C++的最大區別:在于它們的用于解決問(wèn)題的思想方法不一樣。之所以說(shuō)C++比C更先進(jìn),是因為“ 設計這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語(yǔ)言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯!算法是程序設計的基礎,好的設計如果沒(méi)有好的算法,一樣不行。而且,“C加上好的設計”也能寫(xiě)出非常好的東西。

  對語(yǔ)言本身而言,C是C++的子集,那么是什么樣的一個(gè)子集?從上文可以看出, C實(shí)現了C++中過(guò)程化控制及其它相關(guān)功能,而在C++中的C(我稱(chēng)它為“C+”),相對于原來(lái)的`C還有所加強,引入了重載、內聯(lián)函數、異常處理等等玩藝兒,C++更是拓展了面向對象設計的內容,如類(lèi)、繼承、虛函數、模板和包容器類(lèi)等等。 再提高一點(diǎn),在C++中,數據封裝、類(lèi)型這些東東已不是什么新鮮事了,需要考慮的是諸如:對象粒度的選擇、對象接口的設計和繼承、組合與繼承的使用等等問(wèn)題。

  所以相對于C,C++包含了更豐富的“設計”的概念,但C是C++的一個(gè)自洽子集,也具有強大的功能,同樣值得學(xué)習

  小編給的幾點(diǎn)學(xué)習建議:

  1.基本概念很重要。無(wú)論學(xué)C,還是學(xué)C++,基本概念都是第一位的,也是比較困難的,但只有把握了基本概念才能把握整體脈絡(luò ),才能居高臨下。

  2.C是C++的子集,它的基本概念和設計方法相對比較容易理解,初學(xué)者可從它入手。

  3.如果要學(xué)好C++,建議初學(xué)者最好別在如VC,BCB平臺下寫(xiě)程序,那種自動(dòng)化的代碼生成,花花綠綠的界面,會(huì )讓你手足無(wú)措。最好先找一片空地(unix,dos),從頭做起,寫(xiě)幾個(gè)大點(diǎn)的程序,數個(gè)回合,再到VC,BCB下看看,你會(huì )輕松得很。在我看來(lái),學(xué)好C/C++是成為VC,BCB高手的必由之路。

  4.不要妄想速成,必須得一個(gè)byte,一個(gè)bit的去摳,盡量搞清楚每一個(gè)問(wèn)題。

  C語(yǔ)言和C++的區別2

  C語(yǔ)言和C++的區別是一個(gè)老生常談的問(wèn)題了,建議題主也善用知乎或者外部的搜索,可以很多角度和很多觀(guān)點(diǎn)給你帶來(lái)信息。

  僅針對你問(wèn)題描述的問(wèn)題,是否可以直接上手C++,我的答案是可以,因為我就是這樣子走過(guò)來(lái)的。

  1、 源代碼文件的擴展名

  摘自1.4.1

  C++實(shí)現源代碼文件的擴展名UNIXC、cc、cxx、cGNU C++C、cc、cxx、cpp、c++Digital Marscpp、cxxBorland C++cppWatcomcppMicrosoft Visual C++cpp、cxx、ccFreestyle Code Warriorcp、cpp、cc、cxx、c++

  另外UNIX系統上的C程序的擴展名為.c

  2、變量定義

  摘自2.2.1

  c語(yǔ)言中,所有的局部變量必須在函數或復合語(yǔ)句開(kāi)始位置,c++沒(méi)有這個(gè)限制。

  void main()

  {

  int a; //define variable a

  int b; //define variable b

  a = 10;

  printf("a=%d ", a);

  b = 11;

  printf("b=%d ", b);

  {

  int temp = 0;

  printf("test variable in processing ");

  }

  }

  注釋?zhuān)?/p>

  a、局部變量a和b位于函數開(kāi)始位置,變量temp位于復合語(yǔ)句的開(kāi)始位置。

  b、復合語(yǔ)句(摘自5.1.10):使用兩個(gè)花括號來(lái)構造一條復合語(yǔ)句(代碼塊)。代碼塊由一對花括號和它們包含的語(yǔ)句組成。

  3、 auto

  摘自3.4.5

  c語(yǔ)言中, auto用于聲明變量為自動(dòng)變量,auto修飾符的定義里有這么一句“進(jìn)入包含變量聲明的代碼時(shí),變量開(kāi)始存在。當程序離開(kāi)這個(gè)代碼塊時(shí),自動(dòng)變量消失了。它所占用的內存可用來(lái)做別的事情!,從“當程序離開(kāi)代碼塊時(shí)變量消失”、“內存可用來(lái)做別的事情”可以推出auto修飾的變量是存儲在堆棧中的。而全局變量存儲在靜態(tài)存儲區中,所以用auto決不能修飾全局變量。

  C++11標準引入auto類(lèi)型說(shuō)明符,用它就能讓編譯器替我們去分析表達式所屬的類(lèi)型。

  與原來(lái)那些只對應一種特定類(lèi)型的說(shuō)明符不同,auto讓編譯器通過(guò)初值來(lái)推算變量類(lèi)型。顯然,auto定義的變量必須要有初始值。

  auto i=0,*p=&i; //正確,i是整數,p是整形指針

  4、stuct

  摘自4.4

  在C語(yǔ)言中, struct類(lèi)型的定義必須加上struct的前綴

  struct opt {

  int len;

  int value;

  };

  void main()

  {

  struct opt tmp;

  tmp.len = 1;

  tmp.value = 2;

  }

  而在C++中,struct可以直接使用其類(lèi)型名來(lái)定義

  #include <iostream>

  struct opt {

  int len;

  int value;

  };

  int main()

  {

  opt tmp;

  tmp.len = 1;

  tmp.value = 2;

  std::cout<<tmp.len<<std::endl;

  std::cout<<tmp.value<<std::endl;

  return 0;

  }

  相比之下,C++的語(yǔ)法更簡(jiǎn)潔一些。所以在用C語(yǔ)言編寫(xiě)代碼的時(shí)候,C程序員通常是這么來(lái)定義的struct的。在下面的代碼中,使用typedef來(lái)定義一個(gè)opt的類(lèi)型

  typedef struct _opt {

  int len;

  int value;

  }opt;

  void main()

  {

  opt tmp;

  tmp.len = 1;

  tmp.value = 2;

  }

  5、stuct初始化

  推薦一個(gè)我自己的C/C++交流群 815393859

  摘自4.4.2

  與數組一樣,c++11也支持將列表初始化用于結構,且等號(=)是可選的:

  opt tmp {1, 2};

  其中不允許縮窄轉換,例如:

  opt tmp {1.0, 2};

  編譯報錯:

  error: narrowing conversion of ‘1.0e+0’ from ‘double’ to ‘int’ inside { }

  c語(yǔ)言可以使用列表初始化,但是等號(=)是必須的。

  opt tmp = {1,2};

  6、枚舉的取值范圍

  摘自4.6.2

  c++現在通過(guò)強制類(lèi)型轉換,增加了可以賦值給枚舉變量的合法值。

  每個(gè)枚舉都有取值范圍,通過(guò)強制類(lèi)型轉換,可以將取值范圍中的任何整數賦值給枚舉變量,即使這個(gè)值不是枚舉值例如,假設bits 和myflag 的定義如下:

  enum bits{ one=1,two=2,four=4,eight=8};

  bits myflag;

  則下面的代碼是合法的:

  myflag=bits(6);//正確,因為 6在bits的范圍

  取值范圍的定義:首先,要找出上限,需要知道枚舉量的最大值。找到大于這個(gè)最大值的、最小的2的冪,將它減去1,得到的便是取值范圍的上限。

  例如對于:

  enum bigstep{first,second = 100,third};

  最大枚舉值是101,在2的冪中,比這個(gè)值大的最小的值為128,因此取值范圍上限為127.

  要知道下限,需要知道枚舉量的最小值.如果它不小于0,則取值范圍的下限為0.否則,采取與尋找上限方式同樣的方式,但加上負號,

  例如,如果最小的枚舉量為-6,則比它小的,2的冪最大的值為-8,加1之后為-7.于是,上限與下限便能算出來(lái).

  c語(yǔ)言中不能定義這樣的變量:bits myflag;

  7、for循環(huán)

  摘自5.1

  C++11新增一種循環(huán):基于范圍(range-based)的for循環(huán):簡(jiǎn)化一種常見(jiàn)的循環(huán)任務(wù):對數組(或容器類(lèi),如vector和array)的每個(gè)元素執行相同的操作.

  格式如下:

  for(Type VarName : Array){

  //每個(gè)元素的值會(huì )依次賦給 VarName

  }

  示例:

  double prices[5]={4.99, 2.33, 5.86, 6.42, 4.51};

  for (double x : prices)

  std::cout<<x<<std::endl;

  8、邏輯運算符的另一種表示

  摘自6.2.6

  并不是所有的鍵盤(pán)都提供了用作邏輯運算符的符號,標識符and、or和not都是c++保留字,這意味著(zhù)不能將它們用作變量名等。它們不是關(guān)鍵字,因為它們都是已有語(yǔ)言特性的另一種表示方式。另外,它們并不是c語(yǔ)言中的保留字,但c語(yǔ)言程序可以將它們用作運算符,只要在程序中包含了頭文件iso646.h.

  邏輯運算符:另一種表示方式

  運算符另一種表示方式&&and||or!not

  9、c++字符庫函數cctype

  摘自6.3

  cctype中通常包括一些常用函數的判斷,如某個(gè)字符是否為大寫(xiě),用isupper()如果參數是大寫(xiě)字母,函數返回true, 還有像isalnum(),如果參數是字母數字,即字母或者數字,函數返回true.

  函數名稱(chēng) 返回值

  isalnum() 如果參數是字母數字,即字母或者數字,函數返回true

  isalpha() 如果參數是字母,函數返回true

  isblank() 如果參數是水平制表符或空格,函數返回true

  iscntrl() 如果參數是控制字符,函數返回true

  isdigit() 如果參數是數字(0-9),函數返回true

  isgraph() 如果參數是除空格之外的打印字符,函數返回true

  islower() 如果參數是小寫(xiě)字母,函數返回true

  isprint() 如果參數是打印字符(包括空格),函數返回true

  ispunct() 如果參數是標點(diǎn)符號,函數返回true

  isspace() 如果參數是標準空白字符,如空格、換行符、水平或垂直制表符,函數返回true

  isupper() 如果參數是大寫(xiě)字母,函數返回true

  isxdigit() 如果參數是十六進(jìn)制數字,即0-9、a-f、A-F,函數返回true

  tolower() 如果參數是大寫(xiě)字符,返回其小寫(xiě),否則返回該參數

  toupper() 如果參數是小寫(xiě)字符,返回其大寫(xiě),否則返回該參數

  10 、wchar_t 和C++11新增類(lèi)型:char16_t char32_t

  摘自3.1.8

  wcha_t:

  wchar_t是C/C++的字符類(lèi)型,是一種擴展的存儲方式,主要用在國際化程序的實(shí)現中。

  wchar_t 存在的原因:

  char是八位字符類(lèi)型,最多能包含256中字符,許多的外文字符集所包含的字符數目超過(guò)256個(gè),char型不能表示。

  wchar_t數據大。

  數據類(lèi)型一般為16或者32位,不同的C/C++庫有不同的規定?傊簑char_t所能表示的字符遠遠多于char類(lèi)型。

  wchar_t的輸入輸出處理:

  cin和cout將輸入和輸出看作是char流,因此不適合用于處理wchat類(lèi)型,iostream頭文件提供了wcin 和wcout用于處理輸入輸出流另外可以通過(guò)加上前綴L來(lái)只是寬字符常量和寬字符串。

  char16_t和char32_t:

  產(chǎn)生原因:

  隨著(zhù)編程人員日益的熟悉Unicode,類(lèi)型wchar_t顯然已經(jīng)滿(mǎn)足不了需求,在計算機系統上進(jìn)行的編碼字符和字符串編碼時(shí),僅僅使用Unicode碼點(diǎn)顯然是不夠的,

  比如:如果在進(jìn)行字符串編碼時(shí),如果有特定長(cháng)度和符號特征的類(lèi)型將很有幫助,而類(lèi)型wchar_t的長(cháng)度和符號特征隨實(shí)現而已,因此C++11新增了類(lèi)型char16_t,char32_t。

  char16_t:無(wú)符號類(lèi)型,長(cháng)16位,

  char32_t無(wú)符號類(lèi)型,長(cháng)32位

  C++11使用前綴u表示char16_t字符常量和字符串常量如:u‘L’;u“l(fā)ilili”;

  C++11使用前綴U表示char32_t字符常量和字符串常量如:U'L';U"lilili";

  類(lèi)型char16_t與/u00F6形式的通用字符名匹配,

  類(lèi)型char32_t與/U0000222B形式的通用字符名匹配。

  前綴u和U分別指出字符字面值的類(lèi)型為char16_t和char32_t。

  11、函數重載

  摘自8.4

  C++ 允許多個(gè)函數擁有相同的名字,只要它們的參數列表不同就可以,這就是函數的重載(Function Overloading)。借助重載,一個(gè)函數名可以有多種用途。

  void test(int tmp1, int tmp2)

  {

  std::cout << tmp1 <<std::endl;

  std::cout << tmp2 <<std::endl;

  }

  void test(double tmp1, double tmp2)

  {

  std::cout << tmp1 <<std::endl;

  std::cout << tmp2 <<std::endl;

  }

  函數的重載的.規則:

  函數名稱(chēng)必須相同。

  參數列表必須不同(個(gè)數不同、類(lèi)型不同、參數排列順序不同等)。

  函數的返回類(lèi)型可以相同也可以不相同。

  僅僅返回類(lèi)型不同不足以成為函數的重載。

  C++ 是如何做到函數重載的

  C++代碼在編譯時(shí)會(huì )根據參數列表對函數進(jìn)行重命名。當發(fā)生函數調用時(shí),編譯器會(huì )根據傳入的實(shí)參去逐個(gè)匹配,以選擇對應的函數,如果匹配失敗,編譯器就會(huì )報錯,這叫做重載決議(Overload Resolution)。

  在C語(yǔ)言中,不存在函數重載,原因為以函數名來(lái)唯一區分一個(gè)全局函數。而在c++中 以函數名+參數列表來(lái)唯一區分函數。

  12、引用

  摘自8.2

  引用(reference)是c++對c語(yǔ)言的重要擴充。引用就是某一變量(目標)的一個(gè)別名,對引用的操作與對變量直接操作完全一樣。其格式為:類(lèi)型 &引用變量名 = 已定義過(guò)的變量名。

  引用的特點(diǎn):

  1. 一個(gè)變量可取多個(gè)別名。

  2. 引用必須初始化。

  3. 引用只能在初始化的時(shí)候引用一次 ,不能更改為轉而引用其他變量。

  總結:

  1. 不要返回一個(gè)臨時(shí)變量的引用。

  2. 如果返回對象出了當前函數的作用域依舊存在,則最好使用引用返回,因為這樣更高效。

  * 引用和指針的區別和聯(lián)系

  1. 指針是一個(gè)實(shí)體,而引用僅是個(gè)別名;

  2. 引用使用時(shí)無(wú)需解引用(*),指針需要解引用;

  3. 引用只能在定義時(shí)初始化一次,之后不能改變指向其它變量(從一而終);指針變量的值可變。

  4. 引用必須指向有效的變量,指針可以為空。

  5. sizeof指針對象和引用對象的意義不一樣。sizeof引用得到的是所指向的變量的大小,而sizeof指針是對象地址的大小。

  6. 指針和引用自增(++)自減(--)意義不一樣。


  7. 相對而言,引用比指針更安全。

  8. 從內存分配上看:程序為指針變量分配內存區域,而引用不需要分配內存區域。

  * 相同點(diǎn):兩者都是地址的概念,指針指向一塊兒內存,其內容為所指內存的地址;引用是某塊兒內存的別名。

  指針比引用更為靈活,但是其風(fēng)險也很大。使用指針時(shí)一定要檢查指針是否為空(NULL),且空間回收后指針最好置零,以免野指針的發(fā)生造成內存泄漏等問(wèn)題。

  #include <iostream>

  int main()

  {

  struct student{

  std::string name;

  int num;

  };

  student lily = {"andrew", 168};

  const student &ref = lily;

  student *p = &lily;

  std::cout << sizeof ref<< "= sizeof ref ";

  std::cout << sizeof p<< "= sizeof pointer ";

  }

  執行結果:

  16= sizeof ref

  8= sizeof pointer

【C語(yǔ)言和C++的區別】相關(guān)文章:

C語(yǔ)言和C++的區別09-19

C++、C語(yǔ)言和JAVA開(kāi)發(fā)的區別06-28

淺談c語(yǔ)言和c++和VB的區別07-04

C語(yǔ)言和C++有什么區別05-19

C++、C語(yǔ)言和JAVA開(kāi)發(fā)有哪些區別08-09

C語(yǔ)言和C++的分別06-18

c語(yǔ)言和c++和VB有什么區別07-16

C語(yǔ)言和C++之間的關(guān)系06-15

Java與C/C++的區別06-18

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看