從C語言過渡到C++之基本變化
說到C++和C語言的區(qū)別,大部分人都會想到面向?qū)ο蠛兔嫦蜻^程。然而這種說法并不準確。面向?qū)ο蠛兔嫦蜻^程指的是兩種不同的程序設計思想,而C++與C是兩種編程語言,難道C++就不能用于面向過程去解決問題嗎,當然可以。而面向?qū)ο蟮脑O計思想也可以用到C語言中去,我之前的文章就涉及過這方面的知識。
我們這個系列就是要拋開編程思想,單純地從語法的角度介紹一下C++中究竟加入了哪些C語言中沒有的功能。希望大家在掌握了C語言之后再來學習這部分內(nèi)容。
首先,讓我們看一段標準的C++代碼:
// main.cpp #include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; return 0; }
這個是一個最基本的程序,用來在屏幕上打印出“Hello World”這句話。是不是和C語言程序差距較大呢?今天,我們先介紹C++和C語言的幾個最基本的不同。
1. 頭文件
C語言中,標準輸入輸出的頭文件引用方式如下:
#include <stdio.h>
而C++中使用的是:
#include <iostream>
C++規(guī)定,由系統(tǒng)提供的頭文件在引用時不帶“.h”。如果是自己定義的頭文件,需要這樣引用:
#include "myfile.h"
注意,這里不僅使用了“.h”而且還用了雙引號。原因和C語言相同,從當前路徑開始尋找。另外,由于C++是完全支持C語言的全部功能的,所以當我們要使用C語言提供的頭文件時,依然要使用:
#include <stdio.h>
這樣定義的好處是,我們只看頭文件的包含形式就知道引用的是C++的系統(tǒng)庫還是C語言的系統(tǒng)庫,亦或是自定義函數(shù)庫。
2. 命名空間
大家肯定注意到這句話了:
using namespace std;
這句話的意思是引入命名空間std,我們輸出字符串使用的cout關鍵字就在std中。C++庫中的函數(shù)被劃分到不同的命名空間中,如果需要訪問,就要先使用這句話引入命名空間。
假如我們沒有寫這句話,就要在每次使用到這些函數(shù)時手動指定命名空間,之前的代碼就要變成這樣:
// main.cpp #include <iostream> int main() { std::cout << "Hello World!" << std::endl; return 0; }
這樣寫是合法的,只不過有些麻煩。
3. C++的輸入輸出
C++的輸入輸出做了較大的修改,我們先看下面這個例子:
#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; }
這個程序?qū)崿F(xiàn)了輸入兩個數(shù)字,之后把它們打印在屏幕上。程序的執(zhí)行結(jié)果如下:
cin
相當于scanf,用于把輸入的字符保存在后面的變量中。cin必須和>>一起使用,需要輸入幾個變量就寫幾個變量,之間用>>分隔開。
cout
相當于printf,用于把字符串或變量打印在屏幕上。需要打印的元素要用<<分隔開,endl表示換行。
這兩個關鍵字最大的優(yōu)勢是不需要關注變量的數(shù)據(jù)類型,C++會根據(jù)變量的定義自動匹配合適的數(shù)據(jù)類型。
使用這兩個關鍵字時必須包含<iostream>這個庫。
4. 變量的定義
C語言中有個被很多人詬病的規(guī)定是變量的定義必須放在代碼塊的首部。這樣就會經(jīng)常出現(xiàn)變量的定義和第一次使用之間距離很遠,比如下面這段代碼。
int main() { int i, j; // Do something for (i = 0; i < 100; i++) { printf("%d\n", i); } return 0; }
這段代碼中,變量i的聲明和第一次使用之間可能隔了幾十行的代碼。這樣嚴重影響了代碼的可讀性,也提高了調(diào)試的成本。
在C++中,這種情況本根本地解決了。C++允許在任何地方定義變量,只要在使用它之前就行。于是就有了這樣的寫法:
for (int i = 0; i < 100; i++) { // Do something }
這樣寫是不是變得非常清楚了。在C++中,我們習慣在使用變量時定義,很多只會用C語言的程序員也在使用.cpp文件寫代碼就是為了有這么一個便利條件。
5. 一定要先學C再學C++嗎
雖然我是帶大家先學C語言再學C++的,很多程序員也都是走的這個學習路線。但并不是一定要先學C再學C++。
我總是用這么個例子來解釋這個問題。C和C++就仿佛是手動擋和自動擋的區(qū)別,雖然我們大部分人都是先學手動擋再學自動擋,但并不能說不會開手動擋的人就學不會自動擋。自動擋其實還更好學一些。對于駕駛這兩種車而言,它們有很多相同的部分,比如打方向的方法、踩油門和剎車的方法、打轉(zhuǎn)向燈的方法、轉(zhuǎn)彎并線等等這些要點都是相同的,只不過你先學哪個就在那里學習這些公共部分而已。
C和C++也是一樣,80%以上的語法點都是相同的,而這些語法點你是通過哪種語言學會的沒有任何區(qū)別。
大部分學校安排課程的時候都是先學C再學C++,因為C更關注細節(jié),能夠幫助學生更清晰地了解程序和硬件的一些關系,人們認為只要這么學才能打下好的基礎。但隨著計算機編程技術的不斷發(fā)展,如今更流行的觀點是編程就是為了幫助我們更好地使用計算機解決問題,以這個目的為導向,那些沒必要知道的東西可以不去在意。于是越來越多的人用C++、Java、甚至Python這樣遠離硬件的語言進行編程入門。這些人依然可以設計出自己想要的程序。
所以,請大家不要再糾結(jié)先學誰后學誰的問題了,可能不久后,我就會推出從零開始學習C++這樣的系列了。
敬請期待~
- 一文秒懂C語言/C++內(nèi)存管理(推薦)
- 如何將C++源程序改寫為C語言
- C/C++使用C語言實現(xiàn)多態(tài)
- 面試常見問題之C語言與C++的區(qū)別問題
- 詳解Dev C++使用教程(使用Dev C++編寫C語言程序)
- C++中如何調(diào)用C語言的代碼實現(xiàn)
- C語言和C++的6點區(qū)別
- C++中對C語言結(jié)構(gòu)體用法的擴充
- 從C語言過渡到C++之const
- C語言實現(xiàn)C++繼承和多態(tài)的代碼分享
- C語言模擬實現(xiàn)C++的繼承與多態(tài)示例
- C語言中const和C++中的const 區(qū)別詳解
- C/C++內(nèi)存管理詳情
相關文章
Java C++題解leetcode856括號的分數(shù)
這篇文章主要為大家介紹了Java C++題解leetcode856括號的分數(shù)實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10