天天看點

C++基礎

變量存在的意義:友善管理記憶體。

變量建立的文法:資料類型 變量名=變量的初始值;

         int   a = 10;

#define 宏常量

  通常在檔案上方定義,表示一個常量

#const修飾的變量const 資料類型 變量名 = 常量值;

通常在變量定義前面加關鍵字const,修飾該變量偉常量,不可修改。

差別:define是宏定義,程式在預處理階段将用define定義的内容進行了替換。是以程式運作時,常量表中并沒有用define定義的常量,系統不為它配置設定記憶體。const定義的常量,在程式運作時在常量表中,系統為它配置設定記憶體。

C++ 關鍵字

辨別符命名規則

作用:C++規定給辨別符(變量,常量)命名時,有自己的規則。

1、辨別符不能是關鍵字

2、辨別符隻能由字母、數字、下劃線組成

3、第一個字元必須偉字母或下劃線

4、辨別符中字母區分大小寫

#資料類型

存在的意義:給變量配置設定一個合适的記憶體空間。

C++基礎

sizeof關鍵字

//可以利用sizeof求出資料類型占用的記憶體大小

//文法:sizeof(資料類型、變量)

實型

C++基礎

 預設輸出一個小數,隻會輸出六個有效數字

float f2 = 3e2;

cout << f2<<endl; 300

float f3 = 3e-2;

cout << f3; 0.3

1、單精度

2、雙精度

字元型

C/C++字元變量隻存一個位元組。

字元型變量并不是把字元本身存到記憶體中,而是存的ascii值。

轉義字元

\加參數

字元串型

C語言風格字元串

char 變量名[] = “字元串的值";

C++語言風格字元串

String 變量名=”字元串值“;

布爾類型

true=1;

false=0;

隻占用1個位元組。

bool隻要是非0都為真。

三目運算符。

建立三個變量abc

将a和b做比較,将變量打的值指派給C。

int a = 10;

int b = 20;

int c = 30;

c=(a > b ? a : b);

switch語句

缺點:判斷時候隻能是整形或字元型,不可以是一個區間。

優點:結構清晰,執行效率高。

一維數組建立

//數組類型 數組名[數組長度];

//數組類型 數組名[數組長度] = { 值1,值2,值3 };

//數組類型 數組名[] = { 值1,值2,值3 };

一維數組名稱的用途:

1、可以統計整個數組在記憶體中的長度

2、可以擷取數組中記憶體的首位址

cout << (int)&arr[0] << endl;

//将位址轉為10進制

二維數組定義方式:

資料類型 數組名[行數][列數];

資料類型 數組名[行數][列數]={{資料1,資料2},{資料3,資料4}}

資料類型 數組名[行數][列數]={資料1,資料2,資料3,資料4};

資料類型 數組名[][列數]={資料1,資料2,資料3,資料4}

二維數組數組名

1、檢視二維數組所占記憶體空間

2、擷取二維數組的首位址

int arr[2][3] = { 1,2,3,4,5,6 };

cout << sizeof(arr)<<endl;

cout << arr << endl;

cout << sizeof(arr[0]) << endl;//一行所占的記憶體大小。

cout << arr[0][0] << endl;

函數

 函數的聲明

提前告訴編譯器函數的存在,可以利用函數的聲明。

函數的分檔案編寫

作用:讓代碼結構更加清晰

1、建立字尾名為.h的頭檔案

2、建立字尾名為.cpp的源檔案

3、在頭檔案寫函數的聲明

4、在源檔案中寫函數的定義

指針

空指針和野指針

空指針:指針變量隻想記憶體中編号為0的空間

用途:初始化指針變量

注意:空指針隻想的記憶體是不可通路的。

C++核心程式設計部分

1、記憶體分區模型

C++程式在執行的時候,将記憶體大方向劃分為4個區域

運作的時候。

1、代碼區:存放函數體的二進制代碼,由作業系統管理的

2、全局區:存放靜态變量和全局變量

3、棧區:由編譯器自動配置設定釋放,存放函數的參數值,局部變量等。(隻要是局部都是棧區)

4、堆區:由程式員配置設定和釋放,若程式員不釋放,程式結束時由作業系統回收。

意義:不同的區域存放的資料,賦予不同的生命周期,更靈活的程式設計。

在程式編譯後,未執行以前分成兩個區域

代碼區:

  存放CPU執行的機器指令

  代碼區是共享的,共享的目的是對于頻繁被執行的程式,隻需要在記憶體中有一份代碼即可。

  代碼區是隻讀的,使其隻讀的原因是防止程式意外地修改它的指令。

全局區:

  全局變量和靜态變量存放的區域

  全局區還包含了常量區,字元串常量和其他常量存放在此

  該區域的資料在程式結束後作業系統釋放。

總結:

C++在運作之前,編譯後,分為全局區和代碼區

代碼區的特點是共享和隻讀

全局區中存放全局變量、靜态變量、常量

常量區存放const修飾的全局變量 和字元串常量。

不要傳回局部變量的位址

int* func() {//形參資料也放在棧區

int a = 10;

return &a;

}

int main() {

int* p = func();

cout << *p << endl;//第一次可以列印是因為,編譯器做了保留

cout << *p << endl;//第二次資料不再保留了。

system("pause");

return 0;

堆區:

由程式員配置設定釋放,若程式員不是放,程式結束的時候由作業系統回收

在C++中主要利用new在堆區開辟記憶體

 指針本質也是局部變量,放在棧上,但是指針儲存的資料是存放在堆區。

#include <iostream>

using namespace std;

int* func() {

int* a = new int(10);

return a;

cout << *p << endl;// 在堆區開辟的資料

cout << *p << endl;//

new操作符

C++利用new操作符在堆區開辟資料

堆區開辟的資料,由程式員手動開辟,手動釋放,釋放利用操作符delete

文法:new  資料類型

利用new建立的資料,會傳回該資料對應的類型的指針。

delete操作符

堆區的資料 由程式員管理開辟 程式員管理釋放

如果想釋放堆區的資料,利用關鍵字 delete釋放

int *p=new int(10);

delete p;

在堆區利用new開辟數組

建立10整形資料的數組,在堆區

 int *arr=new int[10];//10代表數組有10個元素。

釋放數組的時候

delete[] arr;

引用

文法:資料類型 &别名=原名

int &b=a;

b=20;

cout<<a<<endl;// a為20

//int &c;//錯誤,引用必須初始化

int &c = a;//一旦初始化以後,就不可以更改

c = b;//這是指派操作,不是更改引用

cout << " a = " << a << endl;

cout << " b = " << b << endl;

cout << " c = " << c << endl;

1、引用必須要初始化

2、引用一旦初始化後,就不可以更改。

通路權限

三種

公共權限  成員類内可以通路    類外可以通路

保護權限  成員類内可以通路    類外不可以通路      差別:繼承中。兒子可以通路父親中的保護内容。

私有權限  成員類内可以通路    類外不可以通路      差別:兒子不能通路父親的内容。兒子不可以通路父親的私有内容。

struct和class差別:

struct預設權限為公共

class預設權限為私有

成員屬性設定為私有

優點1:将所有成員屬性設定為私有,可以自己控制讀寫權限

優點2:對于寫權限,我們可以檢測資料的有效性

 void setName(string name){

  if(name=="")

return;

上一篇: C++基礎
下一篇: C++基礎

繼續閱讀