C 學習記錄(1)

2021-08-03 13:02:55 字數 4867 閱讀 2574

namespace:命名空間

using:宣告;

如果在乙個空間中,兩個變數或函式的名字一樣,編譯的時候會衝突。命名空間就是為了解決c++中函式變數的命名衝突所採取的一種措施,能夠解決多模組協同開發出現變數函式命名的衝突問題。

在這裡面可以把命名空間理解成資料夾,如果你在hel1這個資料夾中編輯兩個hello.cpp肯定會出問題,但是如果乙個在hel1,乙個在hel2這個資料夾中p,這個就不會出現衝突。

命名空間的必要性: 當程式比較大的時候,需要多人合作,命名空間就非常必要。

命名空間中可以有函式

命名空間用namespace定義,格式如下:

namespace  命名空間名

例:

#include  

using

namespace

std;

namespace nsa

1.3.1 using 宣告

using宣告可以出現在全域性域和任意命名空間中,也可以出現在區域性域中。

using  namespace_name::name;
一旦使用using宣告,就可以直接引用命名空間中的成員,而不需要再引用該成員的命名空間。

命名空間std,這是最常用的命名空間,而不需要再引用該成員的命名空間。

#include 

#include

using

std::cin; //using宣告,表明要引用標準庫std中的成員cin;

using

std::string; //using宣告,表明要引用標準庫std中的成員string;

int main()

在using 指令中,using後面必須跟關鍵字namespace,而且最後必須為命名空間名;如:

using

namespace

std;

在using 宣告中,關鍵字後面沒有namespace, 後面必須為命名空間的成員名。如:

using

std::cin;

1.3.2 using的作用域

using的作用域用大括號括起來。

#include 

using

namespace

std;

namespace nsa

namespace nsb

int main()

c語言中malloc ,free是在堆上申請、釋放空間。

int* p = (int *)malloc(sizeof(int)*10);

free(p);

c++中不僅可使用malloc,free。還有new,delete

int *p = new int;    //申請單個型別空間

delete p

int *p = new int[10];//申請一串空間

delete p;

兩組不能混用,必須成對出現。

區別:

1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

2,對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。

3,因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以乙個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。

4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體。

5、new可以認為是malloc加建構函式的執行。new出來的指標是直接帶型別資訊的。而malloc返回的都是void指標。

函式呼叫的時候會發生一些時間開銷:系統棧的保護,引數的傳遞,棧的恢復。 對於函式體比較小,執行時間短但頻繁使用的函式來說,這種開銷比較大。

內聯函式機制,不是在函式呼叫的時候發生轉移而是在編譯的時候將函式體嵌入到每個內聯函式呼叫處,可以省去呼叫進棧出棧的時間開銷。

函式的定義:

inline  《型別標識》

《函式名》(形參列表)

必要說明:

1) 內聯函式不能含有迴圈語句,swtich語句

2) 內聯函式必須在呼叫之前宣告和定義;

3)內聯函式不能指定丟擲異常型別;

4)inline只是修飾函式向編譯器提出內聯請求,做不作為內聯函式由編譯器決定;

#include 

using

namespace

std;

inline

int max(int,int);

int main()

int temp=a[0];

for(i=0; i<10; i++)

cout

<<"in 10 members is max :"

0; }

inline

int max(int x,int y)

內聯函式的本質是使用空間來換時間,也就是說把內聯函式的內碼先載入到記憶體中,佔據了一點記憶體空間。這樣的好處是呼叫內聯函式時執行效率非常快,省掉了呼叫普通函式儲存現場、跳轉、恢復現場的操作。

c中,每個函式都必須有唯一的乙個名字,這個就必須記住每乙個函式的名字。

例如經常所見的求最大值的函式,資料型別不同,函式名不能相同。

int max1(int ,int);

int max2(int ,int, int);

double max3(double, double);

c++中允許同名函式存在,但函式的引數個數必須不同:即形參個數不同,或形參個數相同,但引數型別有所不同。—-這就是過載。

#include 

using

namespace

std;

int max(int,int);

double max(double,double);

int max(int,int,int);

int main()

int max(int x,int y)

double max(double x,double y)

int max(int x,int y,int z)

函式呼叫時,形參值是由實引數決定,形參實參必須相同。

c++還提供一種方法,為形參設定乙個預設值,即形參不從實參取值。

預設值在函式宣告中提供,但當有宣告又有定義時,定義中不允許有預設值。

如果函式只有定義,則預設值可以出現在函式定義中。

#include  

using

namespace

std;

void point(int x,int y=0, int z=0)

在函式中有多個預設引數,則形參從最右邊依次向左設定。當呼叫函式時,只能向左匹配引數。

錯誤的表示:

void point(int=0,int, int=0);

void point(int=0,int=0,int);

呼叫時,若不賦值則使用預設值,若賦值則覆蓋預設值:

point(x); ok

point(x,y);ok

point(x,y,z);ok

point(); error

point(x, , z); error

使用帶預設值的函式可以將一些簡單的函式合併為乙個函式。但是乙個函式不能既作為過載函式,又作為帶預設值的函式。會出現二義性,系統無法執行。

例:

point(int x,int y);

point(int x,int y=0, int z=0);

point(x,y);

預設值:可以是全域性變數,全域性常量,也可以作為乙個函式表示式。預設值不能是區域性變數。

最常用的輸入輸出運算子>>, <<

標頭檔案 :#include

1) cin : 標準輸入的istream類物件,使使用者能夠從終端讀資料,預設是鍵值;

2)cout:標準輸出的ostream類物件,使使用者從終端寫資料,預設是螢幕;

3)cerr:標準錯誤的ostream, cerr輸出程式錯誤,預設是螢幕

輸入主要由右移操作符》,cin組成:

#include //標準輸入輸出標頭檔案

#include //字串函式標頭檔案

using

namespace

std; //標準命名空間

void main()

cout,<<

cout

<< "hello world!\n";

例:

#include //標準輸入輸出標頭檔案

#include //字串函式標頭檔案

using

namespace

std; //標準命名空間

void main()

C 學習記錄(12)函式(1)

函式在c語言中的概念是模組化程式設計,將某個功能封裝成乙個函式,可以被重複呼叫。1.定義,宣告和使用函式 static void write static void main return sum static void main sum static void showdouble ref int...

C 學習記錄(28)事件(1)

一.事件的含義 事件類似於異常,因為它們都由物件引發 丟擲 我們可以提供 來處理事件。但它們也有幾個重要的區別。最重要的區別是並沒有與try catch 類似的結構來處理事件,而必須訂閱 subscribe 它們。訂閱乙個事件的含義是提供 在事件發生時執行這些 它們稱為事件處理程式。基本處理過程如下...

學習記錄 1

首先開啟示例的 文字挖掘 工作流,看到裡面有三個節點 右鍵檢視excel節點中的示例資料,發現 是詞頻表。所以這個示例工作流是處理提取好的詞頻表,而不是處理原始資料提取詞彙。excel節點的引數都很好理解,看了就懂了,所以略過。第二個節點是篩選高頻詞,右鍵看此節點的配置。第乙個選項 選擇方式 是選擇...