C 菜鳥教程

2021-10-06 15:15:11 字數 3781 閱讀 7046

菜鳥教程c++

全域性變數和和區域性變數同名時,可通過網域名稱在函式中引用到全域性變數,不加網域名稱解析則引用區域性變數

#include

using

namespace std;

int a =10;

intmain()

lambda 函式與表示式

c++11 提供了對匿名函式的支援,稱為 lambda 函式(也叫 lambda 表示式)。

lambda 表示式把函式看作物件。lambda 表示式可以像物件一樣使用,比如可以將它們賦給變數和作為引數傳遞,還可以像函式一樣對其求值。

lambda 表示式本質上與函式宣告非常類似。lambda 表示式具體形式如下:

:預設不捕獲任何變數;

[=]:預設以值捕獲所有變數;

[&]:預設以引用捕獲所有變數;

[x]:僅以值捕獲x,其它變數不捕獲;

[&x]:僅以引用捕獲x,其它變數不捕獲;

[=, &x]:預設以值捕獲所有變數,但是x是例外,通過引用捕獲;

[&, x]:預設以引用捕獲所有變數,但是x是例外,通過值捕獲;

[this]:通過引用捕獲當前物件(其實是複製指標);

c++ 隨機數

在許多情況下,需要生成隨機數。關於隨機數生成器,有兩個相關的函式。乙個是 rand(),該函式只返回乙個偽隨機數。生成隨機數之前必須先呼叫 srand() 函式。

下面是乙個關於生成隨機數的簡單例項。例項中使用了 time() 函式來獲取系統時間的秒數,通過呼叫 rand() 函式來生成隨機數:[*this]:通過傳值方式捕獲當前物件;

#include

#include

#include

using

namespace std;

int main (

)return0;

}

虛擬繼承格式

另外多繼承(環狀繼承),a->d, b->d, c->(a,b),例如:

class d;

class b: public d;

class a: public d;

class c: public b, public a;這個繼承會使d建立兩個物件,要解決上面問題就要用虛擬繼承格式格式:class 類名: virtual 繼承方式 父類名

class d;

class b: virtual public d;

class a: virtual public d;

class c: public b, public a;

c++ 多型:c++ 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。下面的例項中,基類 shape 被派生為兩個類,如下所示:

#include

using

namespace std;

class

shape

intarea()

};class

rectangle

:public shape

int area ()}

;class

********

:public shape

int area ()}

;// 程式的主函式

intmain()

當上面的**被編譯和執行時,它會產生下列結果:

parent class area

parent class area

導致錯誤輸出的原因是,呼叫函式 area() 被編譯器設定為基類中的版本,這就是所謂的靜態多型,或靜態鏈結 - 函式呼叫在程式執行前就準備好了。有時候這也被稱為早繫結,因為 area() 函式在程式編譯期間就已經設定好了。但現在,讓我們對程式稍作修改,在 shape 類中,area() 的宣告前放置關鍵字 virtual,如下所示:

class

shape

virtual

intarea()

};

修改後,當編譯和執行前面的例項**時,它會產生以下結果:

rectangle class area

******** class area

虛函式

虛函式 是在基類中使用關鍵字 virtual 宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。

我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。

純虛函式

您可能想要在基類中定義虛函式,以便在派生類中重新定義該函式更好地適用於物件,但是您在基類中又不能對虛函式給出有意義的實現,這個時候就會用到純虛函式。

我們可以把基類中的虛函式 area() 改寫如下:

class

shape

// pure virtual function

virtual

intarea()

=0;}

;

= 0 告訴編譯器,函式沒有主體,上面的虛函式是純虛函式。

new 和 delete 運算子

下面是使用 new 運算子來為任意的資料型別動態分配記憶體的通用語法:

new data-type;

在這裡,data-type 可以是包括陣列在內的任意內建的資料型別,也可以是包括類或結構在內的使用者自定義的任何資料型別。讓我們先來看下內建的資料型別。例如,我們可以定義乙個指向 double 型別的指標,然後請求記憶體,該內存在執行時被分配。我們可以按照下面的語句使用 new 運算子來完成這點:

double* pvalue = null; // 初始化為 null 的指標 pvalue = new double; //為變數請求記憶體

如果自由儲存區已被用完,可能無法成功分配記憶體。所以建議檢查 new 運算子是否返回 null 指標,並採取以下適當的操作:

>

double

* pvalue =

null

;>if(

!(pvalue =

newdouble))

malloc() 函式在 c 語言中就出現了,在 c++ 中仍然存在,但建議盡量不要使用 malloc() 函式。new 與 malloc() 函式相比,其主要的優點是,new 不只是分配了記憶體,它還建立了物件。

在任何時候,當您覺得某個已經動態分配記憶體的變數不再需要使用時,您可以使用 delete 操作符釋放它所占用的記憶體,如下所示:

delete pvalue; // 釋放 pvalue 所指向的記憶體

下面的例項中使用了上面的概念,演示了如何使用 new 和 delete 運算子:

#include

using

namespace std;

int main (

)

當上面的**被編譯和執行時,它會產生下列結果:

value of pvalue : 29495

c 菜鳥教程

菜鳥教程中的c 1.c 類訪問修飾符 public,private 只有類和友元函式可以訪問 protected 保護成員變數與私有成員十分相似,不同的是保護成員可以在派生類中訪問 在類裡不寫訪問修飾符,預設是private,但是結構體的預設是public 2.虛繼承 需要理解原理 是解決c 多重繼...

菜鳥教程C 高階教程

c 特性 attribute net框架提供了三種預定義特性 attributeusage conditional obsolete 預定義特性attributeusage 預定義特性attributeusage描述了如何使用乙個自定義特性類,它規定了特性可應用到的專案的型別。attributeus...

C 菜鳥教程(C 資料型別)

使用程式語言進行程式設計時,需要用到各種變數來儲存各種資訊。變數保留的是它所儲存的值的記憶體位置。這意味著,當您建立乙個變數時,就會在記憶體中保留一些空間。您可能需要儲存各種資料型別 比如字元型 寬字元型 整型 浮點型 雙浮點型 布林型等 的資訊,作業系統會根據變數的資料型別,來分配記憶體和決定在保...