天天看點

4-C++遠征之起航篇-學習筆記

c++教程起航篇

本文及代碼收錄于個人程式設計筆記(整理中,歡迎Star):

https://github.com/mtianyan/Programming-Notebook

我們會講C++那些事,C++與C語言的關系。

4-C++遠征之起航篇-學習筆記

mark

C++誕生于貝爾實驗室。
4-C++遠征之起航篇-學習筆記

mark

C++之父: 本賈尼·斯特勞斯特盧普

C++社群排行榜

4-C++遠征之起航篇-學習筆記

mark

最新排行,c++排名第三,Python排名第四

C++語言的應用領域:

嵌入式(手機,機頂盒),遊戲程式設計,網絡程式設計,系統程式設計

快,省

C與C++的關系:

C語言是C++的子集。

4-C++遠征之起航篇-學習筆記

mark

C++在文法上完全相容C,C++是從C的基礎上發展而來的。
  • c語言是面向過程的語言,而C++是面向過程的語言又是面向對象的語言。
  • C語言的運作效率比c++更好。
學習C++,基礎是學習C語言

C++ IDE環境搭建

我的IDE 與 IDE初體驗

什麼是IDE環境?

IDE: Integrated Development Environment

內建開發環境

一般包括代碼編輯器,編譯器,調試器和圖形使用者界面工具。

iso檔案,虛拟光驅,找到setup.exe.

Visual Studio 2015 + Visual Assist X

連結: https://pan.baidu.com/s/1SgdThGYaLDyXDFKvaBSa5A 密碼: 2333

安裝後會提示更新,就更了吧。

因為我們學習c++,可以隻安裝C++部分。

  • 如何建立項目
建立項目 -> 選擇Visual C++ -> win32控制台應用程式
4-C++遠征之起航篇-學習筆記

mark

選擇空檔案,了解程式從無到有。

  • 如何建立檔案
4-C++遠征之起航篇-學習筆記

mark

源檔案上點選右鍵添加建立項。

建立時選擇cpp檔案。

  • 如何設定字型字号(工具->選項->字型和顔色)

C++之初體驗

那麼就讓我們駛出遠征中的第一步->Hello C++

#include<iostream>
using namespace std;    //關于這裡,且聽下回分解
int main()
{
   cout<<"Hello C++";  //在此填寫我們的開篇Hello C++
   return 0;
}
           

C++的新特性

C++基本知識

新的資料類型,新的初始化方法,随用随定義的特性

C語言中的資料類型

4-C++遠征之起航篇-學習筆記

mark

  1. c++新增bool資料類型,數值為true與false
4-C++遠征之起航篇-學習筆記

mark

4-C++遠征之起航篇-學習筆記

mark

優:快捷友善,還有視覺上清晰易懂,程式易讀易懂
  1. c++除了擁有語言自帶的初始化方式外,新增了一種定義方式(直接初始化)

C語言提供的初始化方法:

int x =1024

4-C++遠征之起航篇-學習筆記

mark

除了與c語言一樣的複制初始化,還有自己獨有的直接初始化 優點:很快捷友善
  1. c++可随用随定義,而c的對變量的定義必須放置在函數體最前面
4-C++遠征之起航篇-學習筆記

mark

4-C++遠征之起航篇-學習筆記

mark

c語言方式下,程式長了還得調到上面定義變量很不友善。

總結: 新的資料類型(布爾類型),新的初始化方法(用括号括起來直接初始化),随用随定義的特性。

C++的輸入輸出方式

c語言中的I/O 方式

4-C++遠征之起航篇-學習筆記

mark

C++中的I/O 方式

4-C++遠征之起航篇-學習筆記

mark

cout 文法形式:

cout << x << endl;
           
兩個小于号(中間沒有空格),輸入變量x(不需要區分類型,不需要%d等)。

endl

和c語言中的

\n

是等效的。
cout << "x+y=" << x+y << endl;
           

錯誤示例如下:

cout << x,y,z << endl;
           

cin 文法形式:

cin >> x;
           
将外界的輸入傳遞到x。不需要關注變量x的類型,不需要c語言的格式符。
cin >> x >> y;
           
cin輸入方式, x y為變量. 依次為多個變量指派。

這樣的輸入輸出方式有哪些便利?

  • 不用關注占位符。
  • 不用關注資料類型。
不容易出現問題

C++新特性及輸入輸出示範小demo

  • 八進制:oct;
  • 十進制:dec;
  • 十六進制:hexl
  • bool類型輸出:

    boolalpha

    ;
4-C++遠征之起航篇-學習筆記

mark

c++中預設的i/o類型為十進制;如果不加說明,是無法辨認

,

0x

開頭的八進制和十六進制的。在cin或cout中指明進制類型後,該進制将一直有效,直到再次改變它的進制。

4-C++-hexConvert/main.cpp

#include<iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    cout << "請輸入一個整數:" << endl;
    int x = 0; // 随用随定義
    cin >> x;
    cout << "八進制:" << oct << x << endl; // 八進制
    cout << "十進制:" << dec << x << endl; // 十進制
    cout << "十六進制:" << hex << x << endl; // 十六進制

    cout << "請輸入一個布爾值(0或1):"<< endl;
    bool y = false;
    cin >> y;
    cout << boolalpha << y << endl; // 布爾類型輸出

    system("pause");
    return 0;
}
           
f5開始調試
4-C++遠征之起航篇-學習筆記

mark

c++命名空間(namespace)

什麼是命名空間

簡言之: 就是為程式劃片取名字

4-C++遠征之起航篇-學習筆記

mark

namespace差別來自不同的對象的相同名字的函數,為程式劃片取名字。

為什麼要有命名空間?

4-C++遠征之起航篇-學習筆記

mark

A公司和B公司都有小王,那麼不指明是哪個公司的小王就會産生不知道是哪個小王。

程式中的命名空間

4-C++遠征之起航篇-學習筆記

mark

C公司購買了A和B的程式庫,想要使用A的變量x,B公司函數f1怎麼辦?

A和B就要使用命名空間

命名空間關鍵字:

namespace A

,

namespace B

namespace A{
   int x = 0;
   void f1();
   void f2();
}
namespace B{
   int x = 2;
   void f1();
   void f3();
}
           

要調用命名空間内變量或函數寫法(C公司要使用的話):

// 輸出A中的變量x
cout << A::x << endl;
// 使用B中的f1
B::f1();
           

namespace示範代碼

  • 正常的

    system("pause")

    包含于stdlib.h
#include <stdlib.h>

int main()
{
    system("pause");
    return 0;
}
           
  • 要引用相應的頭檔案,還要引用對應的命名空間才可以正常運作。
  1. #include<iostream>

否則報錯,cin cout 未聲明的辨別符
  1. using namespace std;

沒有的話依然報錯, 未聲明的辨別符, 因為iostream 中的cin cout在命名空間當中。
#include "stdafx.h"
#include <stdlib.h>
#include<iostream> // cin cout 步驟1

using namespace std; // 步驟2
int main()
{
    cout << "hello" << endl;
    system("pause");
    return 0;
}
           

模拟A,B公司寫代碼,C公司使用

主函數為main函數模拟c公司。

4-C++-CompanyABC/main.cpp

#include <stdlib.h>
#include<iostream>

namespace A 
{
    int x = 1;
    void fun()
    {
        std::cout << "A Company function" << std::endl;
    }
}

namespace B
{
    int x = 2;
    void fun()
    {
        std::cout << "B Company function" << std::endl;
    }
    void fun2()
    {
        std::cout << "Only B Have" << std::endl;
    }
}

using namespace B;
int main()
{
    std::cout << A::x << std::endl;
    B::fun();
    fun2(); // using name space B; + fun2(); 等價 B::fun2();
    system("pause");
    return 0;
}
           
4-C++遠征之起航篇-學習筆記

mark

不寫

using namespace std

時,想要用cin cout的話, 使用

std::cin

std::cout

章節練習(命名空間)

定義一個命名空間為myNum,在該命名空間中定義一個整型變量x,并給該變量指派為105;使用C++新特性判斷myNum命名空間下的變量是奇數還是偶數。

4-9-C++-namespaceDemo/main.cpp

#include <iostream>
#include <stdlib.h>
using namespace std;

namespace myNum           //填寫命名空間的關鍵字
{
    int x = 105;
}

int main()
{
    // 使用bool類型定義isOdd,作為狀态位
    bool   isOdd = false;

    if (myNum::x % 2 == 0)
    {
        //改變狀态位的值,使其為false
        isOdd = false;
    }
    else
    {
        //改變狀态位的值,使其為true
        isOdd = true;
    }
    // 判斷狀态位的值
    if (isOdd)
    {
        // 如果狀态位的值為true,則列印變量x是奇數
        cout << myNum::x << "是奇數"<<endl;
    }
    else
    {
        // 如果狀态位的值為false,則列印變量x是偶數
        cout << myNum::x << "是偶數"<<endl;
    }
    system("pause");
    return 0;
}
           

5-1 綜合練習

  • 知識點:bool類型 命名空間 輸入輸出。
使用一個函數找出一個整型數組中的最大值最小值。

5-1-c++-boolNamespaceCinCout/main.cpp

一個函數, 傳入整型數組,求最大最小值
/********************************************************/
/*知識點:bool類型 命名空間 輸入輸出                      */
/*題目要求:                                             */
/*        使用一個函數找出一個整型數組中的最大值最小值。    */
/*******************************************************/
#include <stdlib.h>
#include <iostream>

namespace CompA
{
    int getMaxOrMin(int *arr, int count, bool isMax)
    // 數組,數組元素個數,最大還是最小(True 最大,False最小)
    {
        int temp = arr[0]; 
        // 先拿到整個數組中的第一個元素,一旦發現比它大的,就把剛發現的指派給它
        for (int i = 1; i < count; i++)
        // 經典寫法int i=0; i < count; 既然我們已經把第0個取了,我們可以從第一個開始比
        {
            if (isMax)
            {
                if (temp < arr[i]) {
                    temp = arr[i];
                }
            }
            else
            {
                if (temp > arr[i]) {
                    temp = arr[i];
                }
            }

        }

        return temp;
    }
}


int main(void)
{
    int arr1[4] = { 3,5,1,7 };
    bool isMax = false; // 與形參差別開
    std::cout << "您想要求數組{3,5,1,7}最大值還是最小值?(0最小,1最大)" << endl;
    std::cin >> isMax;
    std::cout << CompA::getMaxOrMin(arr1, 4, isMax) << std::endl;
    system("pause"); // stdlib.h
    return 0;
}
           
4-C++遠征之起航篇-學習筆記

mark