C++學(xué)習(xí)記錄(上)

為什么要學(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++的一種基本類型,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姜凄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子董虱,更是在濱河造成了極大的恐慌申鱼,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淫半,死亡現(xiàn)場離奇詭異,居然都是意外死亡撮慨,警方通過查閱死者的電腦和手機脆粥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來规伐,“玉大人匣缘,你說我怎么就攤上這事〖〕” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵吵护,是天一觀的道長表鳍。 經(jīng)常有香客問我,道長譬圣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任屯蹦,我火速辦了婚禮,結(jié)果婚禮上登澜,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好竭宰,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布切揭。 她就那樣靜靜地躺著狞甚,像睡著了一般廓旬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涩盾,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天励背,我揣著相機與錄音,去河邊找鬼叶眉。 笑死,一個胖子當(dāng)著我的面吹牛莲趣,可吹牛的內(nèi)容都是我干的饱溢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绩郎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了次舌?” 一聲冷哼從身側(cè)響起兽愤,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挪圾,失蹤者是張志新(化名)和其女友劉穎逐沙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吩案,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡徘郭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了残揉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡壳快,死狀恐怖镇草,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梯啤,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布黔夭,位于F島的核電站羽嫡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杭棵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一先舷、第九天 我趴在偏房一處隱蔽的房頂上張望滓侍。 院中可真熱鬧,春花似錦撩笆、人聲如沸缸浦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泣栈。三九已至,卻和暖如春掺涛,著一層夾襖步出監(jiān)牢的瞬間铃绒,已是汗流浹背鸽照。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留定血,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓灾票,卻偏偏與公主長得像茫虽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子濒析,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容