最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從C語言過渡到C++之基本變化

 更新時(shí)間:2017年07月29日 16:32:30   作者:天花板  
在之前的C++代碼訓(xùn)練營系列中,我試圖用完成具體項(xiàng)目的方式給大家介紹C++,但后來大家反饋說這樣從C過渡到C++有點(diǎn)跟不上。于是我又專門設(shè)計(jì)了這個(gè)《從C到C++》的過渡專題,我準(zhǔn)備通過10篇文章介紹一下C++和C的重要區(qū)別。

說到C++和C語言的區(qū)別,大部分人都會(huì)想到面向?qū)ο蠛兔嫦蜻^程。然而這種說法并不準(zhǔn)確。面向?qū)ο蠛兔嫦蜻^程指的是兩種不同的程序設(shè)計(jì)思想,而C++與C是兩種編程語言,難道C++就不能用于面向過程去解決問題嗎,當(dāng)然可以。而面向?qū)ο蟮脑O(shè)計(jì)思想也可以用到C語言中去,我之前的文章就涉及過這方面的知識(shí)。

我們這個(gè)系列就是要拋開編程思想,單純地從語法的角度介紹一下C++中究竟加入了哪些C語言中沒有的功能。希望大家在掌握了C語言之后再來學(xué)習(xí)這部分內(nèi)容。

首先,讓我們看一段標(biāo)準(zhǔn)的C++代碼:

  // main.cpp
  #include <iostream>

  using namespace std;

  int main()
  {
    cout << "Hello World!" << endl;

    return 0;
  }

這個(gè)是一個(gè)最基本的程序,用來在屏幕上打印出“Hello World”這句話。是不是和C語言程序差距較大呢?今天,我們先介紹C++和C語言的幾個(gè)最基本的不同。

1. 頭文件

C語言中,標(biāo)準(zhǔn)輸入輸出的頭文件引用方式如下:

#include <stdio.h>
而C++中使用的是:

#include <iostream>
C++規(guī)定,由系統(tǒng)提供的頭文件在引用時(shí)不帶“.h”。如果是自己定義的頭文件,需要這樣引用:

#include "myfile.h"
注意,這里不僅使用了“.h”而且還用了雙引號(hào)。原因和C語言相同,從當(dāng)前路徑開始尋找。另外,由于C++是完全支持C語言的全部功能的,所以當(dāng)我們要使用C語言提供的頭文件時(shí),依然要使用:

#include <stdio.h>
這樣定義的好處是,我們只看頭文件的包含形式就知道引用的是C++的系統(tǒng)庫還是C語言的系統(tǒng)庫,亦或是自定義函數(shù)庫。

2. 命名空間

大家肯定注意到這句話了:

using namespace std;
這句話的意思是引入命名空間std,我們輸出字符串使用的cout關(guān)鍵字就在std中。C++庫中的函數(shù)被劃分到不同的命名空間中,如果需要訪問,就要先使用這句話引入命名空間。

假如我們沒有寫這句話,就要在每次使用到這些函數(shù)時(shí)手動(dòng)指定命名空間,之前的代碼就要變成這樣:

// main.cpp
#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;

  return 0;
}

這樣寫是合法的,只不過有些麻煩。

3. C++的輸入輸出


C++的輸入輸出做了較大的修改,我們先看下面這個(gè)例子:

#include <iostream>

using namespace std;

int main()
{
  int a, b;

  cout << "Please input two numbers : " << endl;

  cin >> a >> b;

  cout << "a = " << a << ", " << "b = " << b << endl;

  return 0;
}

這個(gè)程序?qū)崿F(xiàn)了輸入兩個(gè)數(shù)字,之后把它們打印在屏幕上。程序的執(zhí)行結(jié)果如下:


cin
相當(dāng)于scanf,用于把輸入的字符保存在后面的變量中。cin必須和>>一起使用,需要輸入幾個(gè)變量就寫幾個(gè)變量,之間用>>分隔開。

cout
相當(dāng)于printf,用于把字符串或變量打印在屏幕上。需要打印的元素要用<<分隔開,endl表示換行。

這兩個(gè)關(guān)鍵字最大的優(yōu)勢是不需要關(guān)注變量的數(shù)據(jù)類型,C++會(huì)根據(jù)變量的定義自動(dòng)匹配合適的數(shù)據(jù)類型。

使用這兩個(gè)關(guān)鍵字時(shí)必須包含<iostream>這個(gè)庫。

4. 變量的定義

C語言中有個(gè)被很多人詬病的規(guī)定是變量的定義必須放在代碼塊的首部。這樣就會(huì)經(jīng)常出現(xiàn)變量的定義和第一次使用之間距離很遠(yuǎn),比如下面這段代碼。

int main()
{
  int i, j;

  // Do something

  for (i = 0; i < 100; i++)
  {
    printf("%d\n", i);
  }

  return 0;
}

這段代碼中,變量i的聲明和第一次使用之間可能隔了幾十行的代碼。這樣嚴(yán)重影響了代碼的可讀性,也提高了調(diào)試的成本。

在C++中,這種情況本根本地解決了。C++允許在任何地方定義變量,只要在使用它之前就行。于是就有了這樣的寫法:

for (int i = 0; i < 100; i++)
{
  // Do something
}

這樣寫是不是變得非常清楚了。在C++中,我們習(xí)慣在使用變量時(shí)定義,很多只會(huì)用C語言的程序員也在使用.cpp文件寫代碼就是為了有這么一個(gè)便利條件。

5. 一定要先學(xué)C再學(xué)C++嗎

雖然我是帶大家先學(xué)C語言再學(xué)C++的,很多程序員也都是走的這個(gè)學(xué)習(xí)路線。但并不是一定要先學(xué)C再學(xué)C++。

我總是用這么個(gè)例子來解釋這個(gè)問題。C和C++就仿佛是手動(dòng)擋和自動(dòng)擋的區(qū)別,雖然我們大部分人都是先學(xué)手動(dòng)擋再學(xué)自動(dòng)擋,但并不能說不會(huì)開手動(dòng)擋的人就學(xué)不會(huì)自動(dòng)擋。自動(dòng)擋其實(shí)還更好學(xué)一些。對(duì)于駕駛這兩種車而言,它們有很多相同的部分,比如打方向的方法、踩油門和剎車的方法、打轉(zhuǎn)向燈的方法、轉(zhuǎn)彎并線等等這些要點(diǎn)都是相同的,只不過你先學(xué)哪個(gè)就在那里學(xué)習(xí)這些公共部分而已。

C和C++也是一樣,80%以上的語法點(diǎn)都是相同的,而這些語法點(diǎn)你是通過哪種語言學(xué)會(huì)的沒有任何區(qū)別。

大部分學(xué)校安排課程的時(shí)候都是先學(xué)C再學(xué)C++,因?yàn)镃更關(guān)注細(xì)節(jié),能夠幫助學(xué)生更清晰地了解程序和硬件的一些關(guān)系,人們認(rèn)為只要這么學(xué)才能打下好的基礎(chǔ)。但隨著計(jì)算機(jī)編程技術(shù)的不斷發(fā)展,如今更流行的觀點(diǎn)是編程就是為了幫助我們更好地使用計(jì)算機(jī)解決問題,以這個(gè)目的為導(dǎo)向,那些沒必要知道的東西可以不去在意。于是越來越多的人用C++、Java、甚至Python這樣遠(yuǎn)離硬件的語言進(jìn)行編程入門。這些人依然可以設(shè)計(jì)出自己想要的程序。

所以,請(qǐng)大家不要再糾結(jié)先學(xué)誰后學(xué)誰的問題了,可能不久后,我就會(huì)推出從零開始學(xué)習(xí)C++這樣的系列了。

敬請(qǐng)期待~

相關(guān)文章

  • 深入VC回調(diào)函數(shù)的使用詳解

    深入VC回調(diào)函數(shù)的使用詳解

    本篇文章是對(duì)VC回調(diào)函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中的哈希容器unordered_map使用示例

    C++中的哈希容器unordered_map使用示例

    這篇文章主要介紹了C++中的哈希容器unordered_map使用示例,本文直接給出實(shí)例代碼,并講解了一些hash table的知識(shí),需要的朋友可以參考下
    2015-06-06
  • VCPKG安裝和使用教程(經(jīng)驗(yàn)總結(jié))

    VCPKG安裝和使用教程(經(jīng)驗(yàn)總結(jié))

    這篇文章主要介紹了VCPKG安裝和使用教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • C/C++實(shí)現(xiàn)HTTP協(xié)議解析的示例代碼

    C/C++實(shí)現(xiàn)HTTP協(xié)議解析的示例代碼

    基本上,HTTP?是一種基于?TCP/IP?的通信協(xié)議,用于通過?Web?傳遞?HTML?文件、圖像文件、查詢結(jié)果等數(shù)據(jù)。本文將用C/C++實(shí)現(xiàn)HTTP協(xié)議解析,感興趣的可以了解一下
    2022-07-07
  • 純c語言優(yōu)雅地實(shí)現(xiàn)矩陣運(yùn)算庫的方法

    純c語言優(yōu)雅地實(shí)現(xiàn)矩陣運(yùn)算庫的方法

    本文主要介紹了純c語言優(yōu)雅地實(shí)現(xiàn)矩陣運(yùn)算庫,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C/C++中智能指針的用法詳解

    C/C++中智能指針的用法詳解

    C/C++中,指針是一個(gè)非常重要的概念,其強(qiáng)大但也麻煩,麻煩之處就在于一旦你申請(qǐng)了內(nèi)存,那就必須要手動(dòng)去釋放內(nèi)容,否則就會(huì)造成內(nèi)存泄漏。所以智能指針的作用就是防止我們麻痹大意忘記釋放內(nèi)存,幫助我們管理內(nèi)存的,本文就來聊聊智能指針的用法
    2023-01-01
  • Java?C++?算法題解leetcode652尋找重復(fù)子樹

    Java?C++?算法題解leetcode652尋找重復(fù)子樹

    這篇文章主要為大家介紹了Java?C++?算法題解leetcode652尋找重復(fù)子樹示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C++實(shí)現(xiàn)LeetCode(6.字型轉(zhuǎn)換字符串)

    C++實(shí)現(xiàn)LeetCode(6.字型轉(zhuǎn)換字符串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(6.字型轉(zhuǎn)換字符串),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 深入探究C++中的容器適配器與仿函數(shù)技術(shù)

    深入探究C++中的容器適配器與仿函數(shù)技術(shù)

    C++中的容器適配器和仿函數(shù)是實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法的重要技術(shù),容器適配器可以將一個(gè)容器轉(zhuǎn)換為另一個(gè)形式,仿函數(shù)則可以自定義數(shù)據(jù)類型的比較、排序、計(jì)算等行為,提高程序的靈活性和可重用性
    2023-04-04
  • 用C語言實(shí)現(xiàn)自動(dòng)售貨機(jī)

    用C語言實(shí)現(xiàn)自動(dòng)售貨機(jī)

    這篇文章主要為大家詳細(xì)介紹了用C語言實(shí)現(xiàn)自動(dòng)售貨機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

汤原县| 苏州市| 钟祥市| 朝阳区| 武定县| 黄梅县| 全南县| 长沙县| 武冈市| 瑞安市| 江陵县| 牙克石市| 松江区| 曲阜市| 新干县| 营口市| 兰州市| 烟台市| 张家口市| 丰宁| 阜新| 桐乡市| 中卫市| 枞阳县| 阿合奇县| 阳江市| 台南市| 安仁县| 灵武市| 鄂伦春自治旗| 孙吴县| 临桂县| 林芝县| 团风县| 连州市| 宣威市| 罗城| 高平市| 富阳市| 威信县| 武山县|