為什么要學(xué)習(xí)c++
C++被稱為帶類的C,是一種面向?qū)ο蟮某绦蛟O(shè)計語言脚仔,面向?qū)ο蟮臋C制是C++與C最大的去別,在我們的培養(yǎng)方案上舆绎,在經(jīng)過大一上學(xué)期學(xué)習(xí)C后,C++就提上來日程吕朵。
由于大一的我們已經(jīng)系統(tǒng)的學(xué)習(xí)過C語言,學(xué)習(xí)記錄只會記錄一些C和C++的不同硫嘶,請諒解
Hello world
和C語言一樣,編寫的第一個代碼又是Hello world
#include <iostream>
using namespace std;
int main()
{
cout <<"Hello world .\n";//cout 是c++新引入的一種輸出方式
printf ("Hello world .");//脫胎于C的c++也保存了C語言的輸出方式梧税。
return 0;
}
在這里我使用了printf沦疾,和cout兩種方式輸出hello world第队。cout既不是C++語言的一種關(guān)鍵字,也不是一個函數(shù)忆畅,cout是C++的一種輸出流對象,對于幾種輸出流這里先不做解釋邻眷。
從一個例子看C和C++的區(qū)別與聯(lián)系
#include <iostream>
using namespace std;
int max(int x,int y);
int min(int x,int y);
int main ()
{
int a,b,c,d;
cout<<"請輸入你想計算的兩個數(shù)。"<<endl;
cin>>a>>b;
c=max(a,b);
d=min(a,b);
cout<<"兩個數(shù)的最大公約數(shù)為"<<c<<endl;
cout<<"兩個數(shù)的最小公倍數(shù)為"<<d<<endl;
}
int max(int x,int y)
{
int i=1,j=0;
for (i; i<=x; i++)
{
if (x%i==0&&y%i==0)
j=i;
}
return j;
}
int min (int x,int y)
{
int i=x,j;
for (i; ; i++)
{
if (i%x==0&&i%y==0)
return i;
}
}
最為明顯的去別是輸入輸出上的不同改衩,C++使用的是cin驯镊,cout,這是C++關(guān)于C進(jìn)步的一點葫督,相較于printf和scanf兩種板惑,C++中的輸入輸出是類型安全的,C語言采用函數(shù)實現(xiàn)輸入輸出洽胶,而C++采用類對象實現(xiàn)輸入輸出裆馒。關(guān)于C++輸入輸出流的具體內(nèi)容,我們后面在進(jìn)行探討喷好。
還有一點相同,對函數(shù)的聲明梗搅,定義及調(diào)用,C++與C基本一致荡短。
在數(shù)據(jù)的儲存、表達(dá)形式和基本運算中的不同
常變量
在C++程序中掘托,在定義變量時洼哎,如果使用了關(guān)鍵字const沼本,這個變量就被定義為了常變量噩峦,類似于C里用#define定義的符號常量抽兆,符號常量在C++里得到了保存,值得一提的是雖然實現(xiàn)的方式不同凭涂,但是都可以認(rèn)為是用一個標(biāo)識符代替一個常量。
強制類型轉(zhuǎn)換符
在C++中強制類型轉(zhuǎn)換變得更加便捷切油,例如
double max=3.1415926;
int y=5
cout <<y+int (max)<<endl;
在這里通過強制類型轉(zhuǎn)換,將double類型的max轉(zhuǎn)換成int類型的中間變量孕荠,通過強制類型轉(zhuǎn)換可以使double類型數(shù)據(jù)向下取整攻谁,參與模運算。
布爾型(bool)
布爾型即邏輯型戚宦,C語言中沒有特定的邏輯型數(shù)據(jù),關(guān)系表達(dá)式的真或假用1或0來表示垦搬。C++中增加了邏輯型那槽,它的值只能是true或false中的一個。
值得一提的是在C++中直接使用語句輸出true或false
bool flag =true;
cout<<flag;
這樣輸出的結(jié)果是1骚灸,即表示在運算過程中編譯系統(tǒng)將邏輯型數(shù)據(jù)看做0或1,同時如果將一個非零數(shù)字賦值給布爾變量义郑,隨后輸出這一變量丈钙,得到的是1,即將非零數(shù)賦予bool變量雏赦,這個變量會按照true進(jìn)行處理。
如果想要在輸出時輸出true或false則需要使用操縱符填大,再輸出語句中插入操縱符boolalpha可以強制要求輸出true和false俏橘。
在利用函數(shù)實現(xiàn)指定功能上的不同
內(nèi)置函數(shù)
在調(diào)用函數(shù)時需要一定的時間和空間的開銷,在C++中提供了一種高效率的方式,即編譯時將主調(diào)函數(shù)的代碼嵌入到主調(diào)函數(shù)中磷蜀,這種方法稱為內(nèi)置函數(shù)百炬。
內(nèi)置函數(shù)需要在函數(shù)左側(cè)添加關(guān)鍵字inline。
需要注意內(nèi)置函數(shù)剖踊,不能包括復(fù)雜的循環(huán)語句和switch語句,并且inline聲明是一個建議性質(zhì)的聲明虫埂,不是指令性質(zhì)的,如果編譯系統(tǒng)發(fā)現(xiàn)函數(shù)不適合使用內(nèi)置的方式圃验,函數(shù)將忽略inline聲明。
函數(shù)的重載
C++中允許同一函數(shù)名定義多個函數(shù)斧散,而這些函數(shù)的參數(shù)個數(shù)和參數(shù)類型可以不相同摊聋。
例如
#include <iostream>
using namespace std;
int main()
{
int max(int a,int b,int c);
double max (double a,double b,double c);
int i1,i2,i3,i_max;
cout<<"請輸入三個整形數(shù)。"<<endl;
cin>>i1>>i2>>i3;
i_max=max(i1,i2,i3);
cout<<"三個數(shù)中的最大值為"<<i_max<<endl;
double d1,d2,d3,d_max;
cout<<"請輸入三個實數(shù)型數(shù)"<<endl;
cin>>d1>>d2>>d3;
d_max=max(d1,d2,d3);
cout<<"三個數(shù)中的最大值為"<<d_max<<endl;
return 0;
}
int max(int a,int b,int c)
{
if(b>a)a=b;
if(c>a)a=c;
return a;
}
double max(double a,double b,double c)
{
if(b>a)a=b;
if(c>a)a=c;
return a;
}
在這個例子中麻裁,我們將兩個比大小的函數(shù)都定義為了max,在函數(shù)的調(diào)用時系統(tǒng)會根據(jù)實參的類型找到與之相匹配的函數(shù)色迂。
這就要求手销,重載函數(shù)的參數(shù)個數(shù),參數(shù)類型或參數(shù)順序中必須至少有一種不同锋拖,函數(shù)的返回值可以相同也可以不同。
函數(shù)模板
所謂函數(shù)模板實際上是建立一個通用函數(shù)侥钳,其函數(shù)類型和形參類型不具體確定讲仰,用一個虛擬的類型來代替。
通用的函數(shù)模板定義為 template <typename T>或template <class T>鄙陡。
在剛剛使用函數(shù)重載編寫的程序,使用函數(shù)模板實際上更加簡潔耙册,但是函數(shù)模板只適用于毫捣,函數(shù)體相同详拙,函數(shù)的參數(shù)個數(shù)相同而類型不同的情況蔓同。
就剛剛上面的那個代碼使用函數(shù)模板寫更簡潔
template <class T>
T max (T a,T b, T c)
{
if (b>a)a=b;
if(c>a)a=c;
return a;
}
在這種題目中,一個函索模板會比函數(shù)重構(gòu)減少大量的工作量弃揽。
如果覺得上面情況里重構(gòu)和函數(shù)模板工作量差不多则北,我這還有道開學(xué)后pta的習(xí)題
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int add(int a,int b)
{
int num;
num=a+b;
return num;
}
double add(double c,double d)
{
double num;
num=c+d;
return num;
}
string add(string s1,string s2)
{
string num;
num=s1+s2;
return num;
}
int main()
{
int a, b;
double c, d;
string s1, s2;
cin >> a >> b;
cin >> c >> d;
cin >> s1 >> s2;
cout << add(a, b) << endl;
cout << fixed << setprecision(2) << add(c, d) << endl;
cout << add(s1, s2) << endl;
return 0;
}
有默認(rèn)參數(shù)的函數(shù)
在C++中可以使用默認(rèn)參數(shù)作為函數(shù)的實參,即給形參變量一個默認(rèn)值涌矢,但是這個默認(rèn)值是可以由傳入?yún)?shù)進(jìn)行更改快骗,需要注意這個時候指定的默認(rèn)值的參數(shù)必須放置在形參列表的最右端。否則容易出錯方篮。
對于C語言和C++在頭文件上的不同
C++的頭文件不在包括.h后綴,但是又考慮向下兼容C的需要泰偿,C++語言就有了兩套頭文件蜈垮,例如math.h和cmath,這兩個頭文件的效果是完全一樣的。
字符串類和字符串變量
C++提供了一種不同于C的新的數(shù)據(jù)類型攒发,string類型,即字符串類型羔砾。但是需要注意的是string類型并不是C++的一種基本類型,