c++教程起航篇
本文及代碼收錄于個人程式設計筆記(整理中,歡迎Star):
https://github.com/mtianyan/Programming-Notebook
我們會講C++那些事,C++與C語言的關系。

mark
C++誕生于貝爾實驗室。
mark
C++之父: 本賈尼·斯特勞斯特盧普
C++社群排行榜
mark
最新排行,c++排名第三,Python排名第四
C++語言的應用領域:
嵌入式(手機,機頂盒),遊戲程式設計,網絡程式設計,系統程式設計
快,省
C與C++的關系:
C語言是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控制台應用程式
mark
選擇空檔案,了解程式從無到有。
- 如何建立檔案
mark
源檔案上點選右鍵添加建立項。
建立時選擇cpp檔案。
- 如何設定字型字号(工具->選項->字型和顔色)
C++之初體驗
那麼就讓我們駛出遠征中的第一步->Hello C++
#include<iostream>
using namespace std; //關于這裡,且聽下回分解
int main()
{
cout<<"Hello C++"; //在此填寫我們的開篇Hello C++
return 0;
}
C++的新特性
C++基本知識
新的資料類型,新的初始化方法,随用随定義的特性
C語言中的資料類型
mark
- c++新增bool資料類型,數值為true與false
mark
mark
優:快捷友善,還有視覺上清晰易懂,程式易讀易懂
- c++除了擁有語言自帶的初始化方式外,新增了一種定義方式(直接初始化)
C語言提供的初始化方法:
int x =1024
mark
除了與c語言一樣的複制初始化,還有自己獨有的直接初始化 優點:很快捷友善
- c++可随用随定義,而c的對變量的定義必須放置在函數體最前面
mark
mark
c語言方式下,程式長了還得調到上面定義變量很不友善。
總結: 新的資料類型(布爾類型),新的初始化方法(用括号括起來直接初始化),随用随定義的特性。
C++的輸入輸出方式
c語言中的I/O 方式
mark
C++中的I/O 方式
mark
cout 文法形式:
cout << x << endl;
兩個小于号(中間沒有空格),輸入變量x(不需要區分類型,不需要%d等)。和c語言中的
endl
是等效的。
\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
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開始調試
mark
c++命名空間(namespace)
什麼是命名空間
簡言之: 就是為程式劃片取名字
mark
namespace差別來自不同的對象的相同名字的函數,為程式劃片取名字。
為什麼要有命名空間?
mark
A公司和B公司都有小王,那麼不指明是哪個公司的小王就會産生不知道是哪個小王。
程式中的命名空間
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示範代碼
- 正常的
包含于stdlib.hsystem("pause")
#include <stdlib.h>
int main()
{
system("pause");
return 0;
}
- 要引用相應的頭檔案,還要引用對應的命名空間才可以正常運作。
-
#include<iostream>
否則報錯,cin cout 未聲明的辨別符
-
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;
}
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;
}
mark