1. 程式人生 > 其它 >世嘉新人培訓教材學習_第一章 _C++知識點複習

世嘉新人培訓教材學習_第一章 _C++知識點複習

技術標籤:# 世嘉新人培訓教材

因為第一章為基礎的C實現了推箱子的簡單遊戲,後面要使用到許多C++的知識,之前學習過,但是因為用的較少,這裡在簡單複習一下。加深理解,同時也知道了在學校學的知識點只是停留在基礎的語法部分,要真的去理解才能取得進步。

一、名稱空間

一、為什麼使用名稱空間

在C++應用程式中會出現同樣的情況。例如,您可能正在編寫一些具有名為xyz()函式的程式碼,並且還有另一個可用的庫,它也具有相同的xyz()函式。現在編譯器無法知道您在程式碼中引用的xyz()函式的哪個版本。

名稱空間(namespace)被設計來克服這個困難,並被用作額外的資訊來區分類似的函式、類、變數等等,它們在不同的庫中具有相同的名稱。使用名稱空間,您可以定義定義名稱的上下文。本質上,名稱空間定義了一個範圍。

C++名稱空間的使用:

使用整個名稱空間:using namespace name;
使用名稱空間中的變數:using name::variable
使用預設名稱空間中的變數:::variable

例如:using namespace std; 該指令告訴編譯器後續程式碼將使用指定名稱空間 std 中的東西。

二、模板

//類模板:
template<typename 型別引數1 , typename 型別引數2 , …> 
class 類名{
    //TODO:
};
//函式模板
template<typename T1,typename T1, ...> 
返回值型別 模板名(形參列表){
	//函式體
}

三、建構函式和解構函式

類的建構函式是一種特殊的函式,在建立一個新的物件時呼叫。(預設建構函式就是無參建構函式)

類的解構函式也是一種特殊的函式,物件消亡時被呼叫。

拷貝(複製)建構函式是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。只有一個引數,為本類的引用

預設情況下,C++編譯器會至少給類加三個函式(預設建構函式,複製建構函式,解構函式)。

①若寫了有參建構函式,則不會提供無參建構函式,會有拷貝建構函式。

②若寫了拷貝建構函式,則不會提供其它建構函式。

四、const

1、const修飾變數 const修飾變數,可以使變數具有常屬性,也就是該變數在以後的使用中其值都不能進行改變

(const修飾的變數要進行初始化。)

2、const和指標

int const* p;//指標p本身可以修改,但是p指向的內容不可以修改
const int*p;//指標p本身可以修改,但是p指向的內容不可以修改
      // const 和變數型別 int 可以互換位置,二者是等價的
int *const p;//指標p本身不能修改,但是p指向的內容可以被修改
int const *const p;//指標p本身和p指向的內容都不可以修改
​
const int *const p;//指標p本身和p指向的內容都不可以修改
簡記:(const放在*左邊)左定值,右定向

3、保護函式引數不被改變 用const修飾函式的引數,可以保證該引數的值在函式內部不被改變。

一般情況下,如果引數是按值傳遞的,那麼函式本來就無法改變引數值。但如果按指標傳遞或按引用傳遞,則const是有用的。

4、const修飾函式返回值 const修飾函式的返回值,表示函式的返回值是常量,不可更改。該返回值只能被賦給加const修飾的同類型變數。一般在類中使用,不常用。

const int fun(){//...}

5、const修飾類成員函式 const可以修飾類成員函式,防止類成員函式中除了static成員之外的其他成員(變數)被修改。

class T{
public :
    void fun()const{
        a = 20;//錯誤,不可以修改非static的值
    b = 10;
    }
private:
    int a;
    static int b;
};
//注意:const 關鍵字不能與 static 關鍵字同時使用,因為 static 關鍵字修飾靜態成員函式,靜態成員函式不含有 this 指標,即不能例項化,const 成員函式必須具體到某一例項。

小例子無法體現const的好處,當程式規模變大時就會體現出這種安全機制的重要性了。在寫函式時只要能加const就儘量加上。

五、delete

T *p = new T;  
delete p;//釋放
T *p =new T[N];//動態分配一個任意大小的陣列:
delete[] p;//釋放  ,如果採用delete p;會導致動態分配的陣列沒有被完全釋放。

因為編譯器無法從指標上判斷所指的是否為陣列,需要人來告知。