C++:C到C++的過渡

C++對C的加強


1.命名空間


爲了解決合作開發時的命名衝突問題,C++ 引入了命名空間(Namespace)的概念。

 

命名空間將全局作用域分成不同的部分

不同命名空間中的標識符可以同名而不會發生衝突

命名空間可以相互嵌套

全局作用域也叫默認命名空間


1)定義

namespace 是C++中的關鍵字,用來定義一個命名空間,語法格式爲:

namespace name
{
    變量
    函數
    類
}
name是命名空間的名字,它裏面可以包含變量、函數、類、typedef、#define 等,最後由{ }包圍。


2)使用方法:

1.使用域解析符::

2.使用using聲明


2.register關鍵字的改變


1、C++編譯器有自己的優化方式,不使用register也可能做優化

 2、C++中可以取得register變量的地址


3.struct類型加強

C語言的struct定義了一組變量的集合,C編譯器並不認爲這是一種新的類型
C++中的struct是一個新類型的定義聲明

4.C++中所有變量和函數都必須要有類型

5.bool類型關鍵字

      true代表真值,編譯器內部用1來表示
      false代表非真值,編譯器內部用0來表示
 
      bool類型只有true(非0)和false(0)兩個值
      C++編譯器會在賦值時將非0值轉換爲true,0值轉換爲false


6.三目運算符的增強

在C++中,表達式返回的是變量本身
C++中三目運算符返回的是變量本身,所以可以作爲左值使用


const關鍵字的改變

C語言中 const修飾的變量是一個 常變量,本質還是變量,有自己的地址空間
C++中 const 變量聲明的是一個真正的常量,不是變量,所以編譯器不會爲該常量分配空間
 const 修飾的常量會被放到 符號表 中


C++的引用

概念:
1)引用作爲其它變量的別名而存在,因此在一些場合可以代替指針
2)引用相對於指針來說具有更好的可讀性和實用性

引用的本質:

引用在C++中的內部實現是一個常指針
    Type& name   ===>  Type* const name
 
C++編譯器在編譯過程中使用常指針作爲引用的內部實現,因此引用所佔用的空間大小與指針相同。
 
從使用的角度,引用會讓人誤會其只是一個別名,沒有自己的存儲空間。這是C++爲了實用性而做出的細節隱藏
 
常引用:

const & int e  相當於 const int * const e
普通引用 相當於 int *const e1
當使用常量(字面量)對const引用進行初始化時,C++編譯器會爲常量值分配空間,並將引用名作爲這段空間的別名
使用字面量對const引用初始化後,將生成一個只讀變量



C++對C的函數擴展

1.內聯函數

C++中推薦使用內聯函數替代宏代碼片段
C++中使用inline關鍵字聲明內聯函數

內聯函數聲明時inline關鍵字必須和函數定義結合在一起,否則編譯器會直接忽略內聯請求。

tip:C++編譯器不一定準許函數的內聯請求

2.默認參數

C++中可以在函數聲明時爲參數提供一個默認值,
當函數調用時沒有指定這個參數的值,編譯器會自動用默認值代替

3.佔位參數

 佔位參數只有參數類型聲明,而沒有參數名聲明
一般情況下,在函數體內部無法使用佔位參數

4.函數重載

概念:

用同一個函數名定義不同的函數
當函數名和不同的參數搭配時函數的含義不同 

判斷標準:

函數重載至少滿足下面的一個條件:
      參數個數不同
      參數類型不同
      參數順序不同
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章