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