C++基礎

1.C++基本語法捶闸、注釋丘薛、數(shù)據(jù)類型乾忱、變量作用域、常量

對象 - 對象具有狀態(tài)和行為徙融。例如:一只狗的狀態(tài) - 顏色、名稱瑰谜、品種欺冀,行為 - 搖動、叫喚萨脑、吃隐轩。對象是類的實例。
 類 - 類可以定義為描述對象行為/狀態(tài)的模板/藍圖渤早。
 方法 - 從基本上說职车,一個方法表示一種行為。一個類可以包含多個方法°擦椋可以在方法中寫入邏輯扛芽、操作數(shù)據(jù)以及執(zhí)行所有的動作。
 即時變量 - 每個對象都有其獨特的即時變量积瞒。對象的狀態(tài)是由這些即時變量的值創(chuàng)建的川尖。
 
 c++標識符:用來標識變量、函數(shù)茫孔、類空厌、模塊,或任何其他用戶自定義項目的名稱银酬。一個標識符以字母 A-Z 或 a-z 或下劃線 _ 開始嘲更,后跟零個或多個字母、下劃線和數(shù)字(0-9)揩瞪。
 C++標識符內(nèi)不允許出現(xiàn)標點字符赋朦,比如 @、& 和 %李破。C++ 是區(qū)分大小寫的編程語言宠哄。
 
 c++注釋:單行和多行
 /* 這是注釋 */

/* C++ 注釋也可以
 * 跨行
 * /
 
 C++七種基本數(shù)據(jù)類型:bool(true false)、char嗤攻、int毛嫉、float、double妇菱、void承粤、wchar_t(寬字符)
 一些基本類型可以使用一個或多個類型修飾符進行修飾:signed、unsigned闯团、short辛臊、long
 
 typedef聲明:使用 typedef 為一個已有的類型取一個新的名字:typedef type newname;
 
 枚舉類型:由用戶定義的若干枚舉常量的集合房交。
 enum 枚舉名{
    標識符[=整型常數(shù)],
    標識符[=整型常數(shù)],
    標識符[=整型常數(shù)],
    標識符[=整型常數(shù)],
 }枚舉變量;
 
 變量是程序可操作的存儲區(qū)的名稱彻舰。C++ 中每個變量都有指定的類型,類型決定了變量存儲的大小和布局候味,該范圍內(nèi)的值都可以存儲在內(nèi)存中刃唤,運算符可應用于變量上。
 變量定義與初始化:type variable_name = value白群;      int d = 3;
 作用域是程序的一個區(qū)域尚胞,一般來說有三個地方可以定義變量:
    在函數(shù)或一個代碼塊內(nèi)部聲明的變量,稱為局部變量川抡。
    在函數(shù)參數(shù)的定義中聲明的變量辐真,稱為形式參數(shù)须尚。
    在所有函數(shù)外部聲明的變量,稱為全局變量侍咱。
 
 常量是固定值耐床,在程序執(zhí)行期間不會改變。這些固定的值楔脯,又叫做字面量撩轰。
 定義常量:1.使用#define預處理器 2.使用const關鍵字
#include <iostream>
using namespace std;

#define LENGTH 10 //定義常量

//枚舉
enum times{
    first,
    second,
    third
}tm;

int g = 20;//全局變量

int main(int argc, const char * argv[]) {
    int a = 10;//局部變量
    
    std::cout << "Hello, World!\n";
    cout << a <<"\n";
    
    const int WIDTH = 5;//定義常量
    int area = LENGTH * WIDTH;
    cout << area <<"\n";
    
    tm = first;
    switch (tm) {
        case first:
            cout<<"first\n";
            break;
        case second:
            cout<<"second\n";
            break;
        case third:
            cout<<"third\n";
            break;
        default:
            break;
    }
    
    return 0;
}
81.png

2.c++存儲類

C++存儲類:
    存儲類定義 C++ 程序中變量/函數(shù)的范圍(可見性)和生命周期。這些說明符放置在它們所修飾的類型之前昧廷。
    包括:auto堪嫂、register、static木柬、extern皆串、mutable、thread_local(C++11)
    auto 關鍵字用于兩種情況:聲明變量時根據(jù)初始化表達式自動推斷該變量的類型眉枕、聲明函數(shù)時函數(shù)返回值的占位符恶复。
        auto f = 3.14; //double
        auto z = new auto(9); //int*
        auto s("hello"); //const char*
    register存儲類用于定義存儲在寄存器中而不是 RAM 中的局部變量。
    static:指示編譯器在程序的生命周期內(nèi)保持局部變量的存在速挑,而不需要在每次它進入和離開作用域時進行創(chuàng)建和銷毀谤牡。因此,使用 static 修飾局部變量可以在函數(shù)調(diào)用之間保持局部變量的值姥宝。
        static 修飾符也可以應用于全局變量翅萤。當 static 修飾全局變量時,會使變量的作用域限制在聲明它的文件內(nèi)腊满。
    extern:用于提供一個全局變量的引用套么,全局變量對所有的程序文件都是可見的。
    mutable 說明符僅適用于類的對象.
    thread_local 說明符聲明的變量僅可在它在其上創(chuàng)建的線程上訪問糜烹。 變量在創(chuàng)建線程時創(chuàng)建违诗,并在銷毀線程時銷毀。 每個線程都有其自己的變量副本疮蹦。


#include <iostream>

// 函數(shù)聲明
void func(void);
static int count = 5; //靜態(tài)全局變量

int main(int argc, const char * argv[]) {
    while(count--)
    {
        func();
    }
    return 0;
}

// 函數(shù)定義
void func( void )
{
    static int i = 5; // 局部靜態(tài)變量
    i++;
    std::cout << "變量 i 為 " << i ;
    std::cout << " , 變量 count 為 " << count << std::endl;
}
82.png

3.運算符

 C++運算符
    算術運算符:+、-茸炒、*愕乎、/、%壁公、++感论、--。加紊册、減比肄、乘快耿、除、取模芳绩、自增掀亥、自減。
 
    關系運算符:==妥色、!=搪花、>、<嘹害、>=撮竿、<=。相等笔呀、不相等幢踏、大于、小于许师、大于等于房蝉、小于等于
 
    邏輯運算符:&&、||枯跑、惨驶! 邏輯與、邏輯或敛助、邏輯非
 
    位運算符:&粗卜、|、^纳击、~续扔、<<、>>焕数、 與纱昧、或、異或堡赔、翻轉(zhuǎn)位识脆、左移、右移
 
    賦值運算符:=善已、+=灼捂、-=、*=换团、/=悉稠、%=、<<=艘包、>>=的猛、&=耀盗、^=、|=
 
    雜項運算符:
        sizeof運算符返回變量的大小卦尊。
        Condition ? X : Y 條件運算符叛拷,如果 Condition 為真 ? 則值為 X : 否則值為 Y。
        .(點):成員運算符用于引用類猫牡、結構和共用體的成員胡诗。
        &:指針運算符 & 返回變量的地址。
        *:指針運算符 * 指向一個變量淌友。

4.循環(huán)和判斷

C++循環(huán)
    循環(huán)類型:
        while循環(huán)
        for循環(huán)
        do…while循環(huán)
    循環(huán)控制語句:
        break:終止 loop 或 switch 語句煌恢,程序流將繼續(xù)執(zhí)行緊接著 loop 或 switch 的下一條語句。
        continue:引起循環(huán)跳過主體的剩余部分震庭,立即重新開始測試條件瑰抵。
 C++判讀
    判斷語句:
        if語句
        if…else語句
        switch語句
    ?:運算符:
        exp1 器联? exp2 : exp3二汛;

5.函數(shù)

/*
C++函數(shù)
    函數(shù)是一組一起執(zhí)行一個任務的語句。每個 C++ 程序都至少有一個函數(shù)拨拓,即主函數(shù) main()肴颊。
    定義函數(shù):
        return_type function_name(parameter list){
            body
        }
        返回類型
        函數(shù)名稱
        參數(shù)
        函數(shù)主體
    函數(shù)參數(shù):
        如果函數(shù)要使用參數(shù),則必須聲明接受參數(shù)值的變量渣磷。這些變量稱為函數(shù)的形式參數(shù)婿着。
        形式參數(shù)就像函數(shù)內(nèi)的其他局部變量,在進入函數(shù)時被創(chuàng)建醋界,退出函數(shù)時被銷毀竟宋。
        當調(diào)用函數(shù)時,有兩種向函數(shù)傳遞參數(shù)的方式:
            傳值調(diào)用:該方法把參數(shù)的實際值復制給函數(shù)的形式參數(shù)形纺。在這種情況下丘侠,修改函數(shù)內(nèi)的形式參數(shù)對實際參數(shù)沒有影響。
            指針調(diào)用:該方法把參數(shù)的地址復制給形式參數(shù)逐样。在函數(shù)內(nèi)蜗字,該地址用于訪問調(diào)用中要用到的實際參數(shù)。這意味著脂新,修改形式參數(shù)會影響實際參數(shù)秽澳。
            引用調(diào)用:該方法把參數(shù)的引用復制給形式參數(shù)。在函數(shù)內(nèi)戏羽,該引用用于訪問調(diào)用中要用到的實際參數(shù)。這意味著楼吃,修改形式參數(shù)會影響實際參數(shù)始花。

 */

#include <iostream>

int sum(int a, int b){
    int result;
    result = a + b;
    return result;
}

int main(int argc, const char * argv[]) {
    
    int a = 1;
    int b = 2;
    int result = sum(a, b);
    std::cout<<"total value is:"<<result;

    return 0;
}

6.數(shù)組

/*
C++數(shù)組
    它可以存儲一個固定大小的相同類型元素的順序集合妄讯。
    聲明數(shù)組:type arrayName [arraySize];
 
 */

#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    
    int n[10] = {1,2,3,4,5,6,7,8,9,10};//聲明并初始化數(shù)組
    
    int sum = 0;
    for(int i = 0; i<10;i++){
        sum = sum + n[i];
    }
    cout<<"sum = "<<sum<<"\n";

    return 0;
}

7.字符串

/*
C++字符串
    c風格字符串
    C++引入的string類類型
    字符轉(zhuǎn)函數(shù):
        strcpy(s1, s2);復制字符串 s2 到字符串 s1。
        strcat(s1, s2);連接字符串 s2 到字符串 s1 的末尾酷宵。
        strlen(s1);返回字符串 s1 的長度亥贸。
        strcmp(s1, s2);如果 s1 和 s2 是相同的,則返回 0浇垦;如果 s1<s2 則返回小于 0炕置;如果 s1>s2 則返回大于 0。
        strchr(s1, ch);返回一個指針男韧,指向字符串 s1 中字符 ch 的第一次出現(xiàn)的位置朴摊。
        strstr(s1, s2);返回一個指針,指向字符串 s1 中字符串 s2 的第一次出現(xiàn)的位置此虑。
 */

#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    
    char str1[11] = "Hello";
    char str2[11] = "World";
    char str3[11];
    long  len ;
    
    // 復制 str1 到 str3
    strcpy( str3, str1);
    cout << "strcpy( str3, str1) : " << str3 << endl;
    
    // 連接 str1 和 str2
    strcat( str1, str2);
    cout << "strcat( str1, str2): " << str1 << endl;
    
    // 連接后甚纲,str1 的總長度
    len = strlen(str1);
    cout << "strlen(str1) : " << len << endl;
    
    //c++中的string類
    string s1 = "hello";
    string s2 = "world";
    string s3;
    long leng;
    
    s3 = s1;
    cout<<"s3:"<<s3<<endl;
    
    s3 = s1 + s2;
    cout<<"s1+s2:"<<s3<<endl;
    
    leng = s3.size();
    cout<<"s3.size():"<<leng<<endl;

    return 0;
}
83.png

8.指針

/*
C++指針
 
    type *var-name;
    指針是一個變量,其值為另一個變量的地址朦前,即介杆,內(nèi)存位置的直接地址。
    所有指針的值的實際數(shù)據(jù)類型韭寸,都是一樣的春哨,都是一個代表內(nèi)存地址的長的十六進制數(shù)。
    不同數(shù)據(jù)類型的指針之間唯一的不同是恩伺,指針所指向的變量或常量的數(shù)據(jù)類型不同赴背。
    int    *ip;    一個整型的指針
    double *dp;    一個 double 型的指針
    float  *fp;     一個浮點型的指針
    char   *ch;     一個字符型的指針
 
 */

#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    int  var = 20;   // 實際變量的聲明
    int  *ip;        // 指針變量的聲明
    
    ip = &var;       // 在指針變量中存儲 var 的地址
    
    cout << "Value of var variable: ";
    cout << var << endl;
    
    // 輸出在指針變量中存儲的地址
    cout << "Address stored in ip variable: ";
    cout << ip << endl;
    
    // 訪問指針中地址的值
    cout << "Value of *ip variable: ";
    cout << *ip << endl;
    
    return 0;
}
84.png

9.引用

/*
C++引用
    引用變量是一個別名,也就是說莫其,它是某個已存在變量的另一個名字癞尚。一旦把引用初始化為某個變量,就可以使用該引用名稱或變量名稱來指向變量乱陡。
    C++ 引用 vs 指針:
        不存在空引用浇揩。引用必須連接到一塊合法的內(nèi)存。
        一旦引用被初始化為一個對象憨颠,就不能被指向到另一個對象胳徽。指針可以在任何時候指向到另一個對象。
        引用必須在創(chuàng)建時被初始化爽彤。指針可以在任何時間被初始化养盗。
    引用通常用于函數(shù)參數(shù)列表和函數(shù)返回值。
 */

#include <iostream>
using namespace std;

double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};

double& setValues( int i )
{
    return vals[i];   // 返回第 i 個元素的引用
}

// 函數(shù)定義
void swap(int& x, int& y)
{
    int temp;
    temp = x; /* 保存地址 x 的值 */
    x = y;    /* 把 y 賦值給 x */
    y = temp; /* 把 x 賦值給 y  */
    
    return;
}

int main(int argc, const char * argv[]) {
    // 聲明簡單的變量
    int i;
    double d;
    // 聲明引用變量
    int& r = i;
    double& s = d;
    
    i = 5;
    cout << "Value of i : " << i << endl;
    cout << "Value of i reference : " << r  << endl;
    
    d = 11.7;
    cout << "Value of d : " << d << endl;
    cout << "Value of d reference : " << s  << endl;
    
    //把引用用作參數(shù)
    // 局部變量聲明
    int a = 100;
    int b = 200;
    
    cout << "交換前适篙,a 的值:" << a << endl;
    cout << "交換前往核,b 的值:" << b << endl;
    
    /* 調(diào)用函數(shù)來交換值 */
    swap(a, b);
    
    cout << "交換后,a 的值:" << a << endl;
    cout << "交換后嚷节,b 的值:" << b << endl;
    
    //把引用作為返回值
    setValues(1) = 20.23; // 改變第 2 個元素
    setValues(3) = 70.8;  // 改變第 4 個元素
    
    cout << "改變后的值" << endl;
    for ( int i = 0; i < 5; i++ )
    {
        cout << "vals[" << i << "] = ";
        cout << vals[i] << endl;
    }
    return 0;
}
Snip20171013_85.png

10.結構體

/*
C++ 數(shù)據(jù)結構
    結構是 C++ 中另一種用戶自定義的可用的數(shù)據(jù)類型聂儒,它允許您存儲不同類型的數(shù)據(jù)項虎锚。
    定義結構:
        struct type_name {
        member_type1 member_name1;
        member_type2 member_name2;
        member_type3 member_name3;
        .
        .
        } object_names;
 
 */

#include <iostream>
using namespace std;

// 聲明一個結構體類型 Books
struct Books
{
    char  title[50];
    char  author[50];
    char  subject[100];
    int   book_id;
};
//方式二:
/*
 typedef struct
 {
 char  title[50];
 char  author[50];
 char  subject[100];
 int   book_id;
 }Books;
 
 */

//結構作為函數(shù)參數(shù)
void printBook( struct Books book )
{
    cout << "書標題 : " << book.title <<endl;
    cout << "書作者 : " << book.author <<endl;
    cout << "書類目 : " << book.subject <<endl;
    cout << "書 ID : " << book.book_id <<endl;
}

int main(int argc, const char * argv[]) {
    Books Book1;        // 定義結構體類型 Books 的變量 Book1
    Books Book2;        // 定義結構體類型 Books 的變量 Book2
    
    // Book1 詳述
    strcpy( Book1.title, "C++ 教程");
    strcpy( Book1.author, "Runoob");
    strcpy( Book1.subject, "編程語言");
    Book1.book_id = 12345;
    
    // Book2 詳述
    strcpy( Book2.title, "CSS 教程");
    strcpy( Book2.author, "Runoob");
    strcpy( Book2.subject, "前端技術");
    Book2.book_id = 12346;
    
    // 輸出 Book1 信息
    cout << "第一本書標題 : " << Book1.title <<endl;
    cout << "第一本書作者 : " << Book1.author <<endl;
    cout << "第一本書類目 : " << Book1.subject <<endl;
    cout << "第一本書 ID : " << Book1.book_id <<endl;
    
    // 輸出 Book2 信息
    printBook( Book2 );
    
    return 0;
}
Snip20171013_86.png
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衩婚,隨后出現(xiàn)的幾起案子窜护,更是在濱河造成了極大的恐慌,老刑警劉巖非春,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柱徙,死亡現(xiàn)場離奇詭異,居然都是意外死亡奇昙,警方通過查閱死者的電腦和手機护侮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敬矩,“玉大人概行,你說我怎么就攤上這事』≡溃” “怎么了凳忙?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長禽炬。 經(jīng)常有香客問我涧卵,道長,這世上最難降的妖魔是什么腹尖? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任柳恐,我火速辦了婚禮,結果婚禮上热幔,老公的妹妹穿的比我還像新娘乐设。我一直安慰自己,他們只是感情好绎巨,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布近尚。 她就那樣靜靜地躺著,像睡著了一般场勤。 火紅的嫁衣襯著肌膚如雪戈锻。 梳的紋絲不亂的頭發(fā)上榴都,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天倘潜,我揣著相機與錄音,去河邊找鬼揣苏。 笑死留瞳,一個胖子當著我的面吹牛拒迅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼坪它,長吁一口氣:“原來是場噩夢啊……” “哼骤竹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起往毡,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靶溜,沒想到半個月后开瞭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡罩息,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年嗤详,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓷炮。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡葱色,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娘香,到底是詐尸還是另有隱情苍狰,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布烘绽,位于F島的核電站淋昭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏安接。R本人自食惡果不足惜翔忽,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盏檐。 院中可真熱鬧歇式,春花似錦、人聲如沸胡野。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽给涕。三九已至豺憔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間够庙,已是汗流浹背恭应。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耘眨,地道東北人昼榛。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胆屿。 傳聞我的和親對象是個殘疾皇子奥喻,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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

  • 基本內(nèi)置類型 算術類型字符整型布爾值浮點數(shù) 空類型(void) 算術類型 帶符號類型和無符號類型int环鲤、short...
    2625K閱讀 3,195評論 0 1
  • 注:原文地址 前言:下文是很基礎的C++語法的 notes,只是個人學習 C++時憎兽,針對自己不熟悉的知識點做的零散...
    cfanr閱讀 1,345評論 2 3
  • 版權聲明:本文為 gfson 原創(chuàng)文章冷离,轉(zhuǎn)載請注明出處。注:作者水平有限纯命,文中如有不恰當之處西剥,請予以指正,萬分感謝...
    gfson閱讀 3,035評論 0 6
  • 出門那輛146司機師傅車開的意外慢 移動營業(yè)廳的姐姐超級溫柔 師大圖書館管理大媽們一個個兇的不行 破街的炒雞也好吃...
    達浪打啦閱讀 242評論 0 0
  • 5. 《朋友圈的意義》 我們會長大亿汞,會走遠瞭空,會在成長中走散一些朋友,因為互留了微信疗我,朋友圈還在咆畏,卻不至于讓他們在我...
    獨立撰稿人胡莊閱讀 250評論 0 0