從C語(yǔ)言過(guò)渡到C++之基本變化
說(shuō)到C++和C語(yǔ)言的區(qū)別,大部分人都會(huì)想到面向?qū)ο蠛兔嫦蜻^(guò)程。然而這種說(shuō)法并不準(zhǔn)確。面向?qū)ο蠛兔嫦蜻^(guò)程指的是兩種不同的程序設(shè)計(jì)思想,而C++與C是兩種編程語(yǔ)言,難道C++就不能用于面向過(guò)程去解決問(wèn)題嗎,當(dāng)然可以。而面向?qū)ο蟮脑O(shè)計(jì)思想也可以用到C語(yǔ)言中去,我之前的文章就涉及過(guò)這方面的知識(shí)。
我們這個(gè)系列就是要拋開(kāi)編程思想,單純地從語(yǔ)法的角度介紹一下C++中究竟加入了哪些C語(yǔ)言中沒(méi)有的功能。希望大家在掌握了C語(yǔ)言之后再來(lái)學(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è)最基本的程序,用來(lái)在屏幕上打印出“Hello World”這句話。是不是和C語(yǔ)言程序差距較大呢?今天,我們先介紹C++和C語(yǔ)言的幾個(gè)最基本的不同。
1. 頭文件
C語(yǔ)言中,標(biāo)準(zhǔn)輸入輸出的頭文件引用方式如下:
#include <stdio.h>而C++中使用的是:
#include <iostream>C++規(guī)定,由系統(tǒng)提供的頭文件在引用時(shí)不帶“.h”。如果是自己定義的頭文件,需要這樣引用:
#include "myfile.h"注意,這里不僅使用了“.h”而且還用了雙引號(hào)。原因和C語(yǔ)言相同,從當(dāng)前路徑開(kāi)始尋找。另外,由于C++是完全支持C語(yǔ)言的全部功能的,所以當(dāng)我們要使用C語(yǔ)言提供的頭文件時(shí),依然要使用:
#include <stdio.h>這樣定義的好處是,我們只看頭文件的包含形式就知道引用的是C++的系統(tǒng)庫(kù)還是C語(yǔ)言的系統(tǒng)庫(kù),亦或是自定義函數(shù)庫(kù)。
2. 命名空間
大家肯定注意到這句話了:
using namespace std;這句話的意思是引入命名空間std,我們輸出字符串使用的cout關(guān)鍵字就在std中。C++庫(kù)中的函數(shù)被劃分到不同的命名空間中,如果需要訪問(wèn),就要先使用這句話引入命名空間。
假如我們沒(méi)有寫這句話,就要在每次使用到這些函數(shù)時(shí)手動(dòng)指定命名空間,之前的代碼就要變成這樣:
// main.cpp
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
這樣寫是合法的,只不過(guò)有些麻煩。
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è)變量,之間用>>分隔開(kāi)。
cout
相當(dāng)于printf,用于把字符串或變量打印在屏幕上。需要打印的元素要用<<分隔開(kāi),endl表示換行。
這兩個(gè)關(guān)鍵字最大的優(yōu)勢(shì)是不需要關(guān)注變量的數(shù)據(jù)類型,C++會(huì)根據(jù)變量的定義自動(dòng)匹配合適的數(shù)據(jù)類型。
使用這兩個(gè)關(guān)鍵字時(shí)必須包含<iostream>這個(gè)庫(kù)。
4. 變量的定義
C語(yǔ)言中有個(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語(yǔ)言的程序員也在使用.cpp文件寫代碼就是為了有這么一個(gè)便利條件。
5. 一定要先學(xué)C再學(xué)C++嗎
雖然我是帶大家先學(xué)C語(yǔ)言再學(xué)C++的,很多程序員也都是走的這個(gè)學(xué)習(xí)路線。但并不是一定要先學(xué)C再學(xué)C++。
我總是用這么個(gè)例子來(lái)解釋這個(gè)問(wèn)題。C和C++就仿佛是手動(dòng)擋和自動(dòng)擋的區(qū)別,雖然我們大部分人都是先學(xué)手動(dòng)擋再學(xué)自動(dòng)擋,但并不能說(shuō)不會(huì)開(kāi)手動(dòng)擋的人就學(xué)不會(huì)自動(dòng)擋。自動(dòng)擋其實(shí)還更好學(xué)一些。對(duì)于駕駛這兩種車而言,它們有很多相同的部分,比如打方向的方法、踩油門和剎車的方法、打轉(zhuǎn)向燈的方法、轉(zhuǎn)彎并線等等這些要點(diǎn)都是相同的,只不過(guò)你先學(xué)哪個(gè)就在那里學(xué)習(xí)這些公共部分而已。
C和C++也是一樣,80%以上的語(yǔ)法點(diǎn)都是相同的,而這些語(yǔ)法點(diǎn)你是通過(guò)哪種語(yǔ)言學(xué)會(huì)的沒(méi)有任何區(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ī)解決問(wèn)題,以這個(gè)目的為導(dǎo)向,那些沒(méi)必要知道的東西可以不去在意。于是越來(lái)越多的人用C++、Java、甚至Python這樣遠(yuǎn)離硬件的語(yǔ)言進(jìn)行編程入門。這些人依然可以設(shè)計(jì)出自己想要的程序。
所以,請(qǐng)大家不要再糾結(jié)先學(xué)誰(shuí)后學(xué)誰(shuí)的問(wèn)題了,可能不久后,我就會(huì)推出從零開(kāi)始學(xué)習(xí)C++這樣的系列了。
敬請(qǐng)期待~
- 一文秒懂C語(yǔ)言/C++內(nèi)存管理(推薦)
- 如何將C++源程序改寫為C語(yǔ)言
- C/C++使用C語(yǔ)言實(shí)現(xiàn)多態(tài)
- 面試常見(jiàn)問(wèn)題之C語(yǔ)言與C++的區(qū)別問(wèn)題
- 詳解Dev C++使用教程(使用Dev C++編寫C語(yǔ)言程序)
- C++中如何調(diào)用C語(yǔ)言的代碼實(shí)現(xiàn)
- C語(yǔ)言和C++的6點(diǎn)區(qū)別
- C++中對(duì)C語(yǔ)言結(jié)構(gòu)體用法的擴(kuò)充
- 從C語(yǔ)言過(guò)渡到C++之const
- C語(yǔ)言實(shí)現(xiàn)C++繼承和多態(tài)的代碼分享
- C語(yǔ)言模擬實(shí)現(xiàn)C++的繼承與多態(tài)示例
- C語(yǔ)言中const和C++中的const 區(qū)別詳解
- C/C++內(nèi)存管理詳情
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
C++ push方法與push_back方法常見(jiàn)方法介紹
push與push_back是STL中常見(jiàn)的方法,都是向數(shù)據(jù)結(jié)構(gòu)中添加元素,本文還將簡(jiǎn)述push對(duì)應(yīng)的stack與queue系列,常見(jiàn)方法的介紹,以及與push_back相對(duì)應(yīng)的vector系列常見(jiàn)方法介紹,感興趣的朋友跟隨小編一起看看吧2022-11-11
Java C++題解leetcode856括號(hào)的分?jǐn)?shù)
這篇文章主要為大家介紹了Java C++題解leetcode856括號(hào)的分?jǐn)?shù)實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
C++俄羅斯方塊游戲 無(wú)需圖形庫(kù)的俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了無(wú)需圖形庫(kù)的C++俄羅斯方塊游戲,重溫經(jīng)典游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
C語(yǔ)言實(shí)現(xiàn)文件操作實(shí)例(簡(jiǎn)單圖示講解)
與普通文件載體不同,文件是以硬盤為載體存儲(chǔ)在計(jì)算機(jī)上的信息集合,文件可以是文本文檔、圖片、程序等等,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言實(shí)現(xiàn)文件操作實(shí)例的相關(guān)資料,需要的朋友可以參考下2023-02-02
C語(yǔ)言所有經(jīng)典排序方法的實(shí)現(xiàn)代碼
這篇文章給大家分享C語(yǔ)言所有經(jīng)典排序方法,文章給大家提供完整的實(shí)例代碼幫助大家快速學(xué)習(xí)掌握C語(yǔ)言排序方法,感興趣的朋友一起看看吧2021-06-06

