內容:
(1)C++簡介和編程的基本變化
(2)命名空間的概念和使用
(3)結構體、聯合、枚舉的不同
(4)布爾類型 以及 運算符別名
(5)函數的重載、缺省參數、啞元以 及內聯
1.簡介和編程的基本變化
1.1 C語言的簡介
1969年,使用匯編語言編寫操作系統,湯普遜 發明了一門語言 B語言,丹尼斯-裡奇 在B語言的基礎上 New B語言,後來改名為C語言
C語言 出生於 1972年
1.2 C++語言的簡介
在C語言的基礎上,本賈尼-斯特勞斯特盧普(Bjarne Stroustrup)做了一定的擴展,起名 New C語言,後來改名為“C with Classes(帶類的C)”,想到了C語言中的運算符 ++, 最後改名為C++,於1983年誕生
1.3 相關的歷史事件
(1)1983年, C++語言誕生
(2)1985年,CFront1.0 第一個C++編譯器誕生
(3)1987年,GNU C++編譯器
(4)1990年,Borland C++
(5)1992年,Microsoft C++
(6)1998年,第一個ISO C++標准誕生
(vc6.0 1998年誕生)
(7)2003年,ISO對C++標准做了修改,C++03標准
(8)2011年,最新的C++標准,C++11或者C++0x
(部分編譯器支持)
1.4 C++和C語言的比較
(1)C++和C語言都是編譯型語言,也就是只有編譯之後才能運行的,有些是不需要編譯就可以直接運行的,是通過解釋器執行的,這種語言叫腳本語言
vi xxx.sh date;cal;ls -l;
(2)C++和C語言都是強類型語言,所有的標示符都必須有數據類型
a; a = 10; //error
(3)C++對C語言提供兼容,並且做了優化提供了更多的特性
a.語言風格更加簡潔
b.類型檢查更加嚴格
// error
int* pi = malloc(sizeof(int));
c.支持面向對象編程
d.支持運算符重載
1+1 = 2
一個人 + 10
e.支持異常處理
f.支持泛型編程
double float ...
1.5 C++的主要用途
(1)用於游戲開發
(2)用於系統和驅動開發
C++ 沒有C語言更加底層,也沒有JAVA/C#更加偏向應用級
網站技術:javaWeb/.net/PHP
編寫第一個C++程序
1.6 編程的基本變化
(1)文件的擴展名發生變化
C語言中源文件: xxx.c
C++中源文件:.C/.cc/.cxx/.cpp(plus plus)
C語言中頭文件: xxx.h
C++中頭文件: xxx.hpp / xxx.h
(2)頭文件的變化
C語言中: #include <stdio.h>
C++中: #include <iostream>
使用C語言中頭文件:
#include <cstdio> 去掉.h,前面加c
vi /usr/include/c++/4.6/cstdio文件中包含的還是 stdio.h文件
(3)輸入輸出的變化
C語言中:scanf/printf 函數
C++中:cin/cout 對象
(4)編譯器的變化
C語言中:gcc/cc xxx.c
C++中: g++/c++ xxx.cpp
gcc/cc xxx.cpp -lstdc++
g++/c++ 的編譯選項和 gcc/cc一樣
-c 只編譯不連接
-S 生成匯編文件
-o 指定輸出文件名
-O 優化
...
(5)命名空間
using namespace std;
使用標准命名空間,標准庫中類以及函數等全部放在std的命名空間中
2.命名空間的學習和使用
引入了命名空間(namespace)的概念,主要用於區分同名的函數、變量等
2.1 自定義命名空間
namespace 命名空間名字
{
變量、函數等
}
注意:
和結構體的格式非常相似,但是關鍵字不同,並且沒有分號,用於作用域的限定,並不是一種獨立的數據類型
:n1,n2 > 表示將n1行到n2行之間的代碼向右縮進
:n1,n2 < 表示將n1行到n2行之間的代碼向左縮進
2.2 使用名字空間的方式
(1)使用名字空間指令的方式使用命名空間
如:
using namespace std;
(2)使用作用域限定符
:: - 作用域限定符,相當於"的"
如:
std::cout << "大家好才是真的 好";
(3)使用名字空間聲明的方式去使用名字空間中的部分內容
如:
using std::cout;
using std::endl;
cout << "大家好才是真的好" << endl;
2.3 無名名字空間
如果一個標示符沒有被置於任何名字空間中,則默認為無名/匿名名字空間中,可以使用如下形式去訪問標示符:
::無名名字空間成員名
2.4 擴展
(1)同一個命名空間中的內容可以分開寫
(2)命名空間中的函數聲明和定義也可以分開,也就是函數的定義可以放在命名空間的外面
(3)命名空間可以進行嵌套
3.結構體、聯合、枚舉的不同
3.1 結構體中的不同
C語言中:
struct Student/*結構體類型名 */{ ... };
struct Student/*左邊整體作為一 個完整的數據類型*/ s;
typedef struct Student
{ ....}Student/*別名*/;
typedef struct
{....}Student/*別名*/;
C++中:
struct Student{...};
[struct] Student s;
(1)C++中的結構體定義變量時可以省略struct關鍵字
(2)C++中的結構體內部可以定義函數,並且函數內使用成員變量時不需要. ->之類的
注意:
(1)在C語言中如果一個函數的形參表為空時,表示可以接受任意多個任意類型的實參
(2)在C++中如果一個函數的形參表中為空時,表示不接受任何實參
思考:
為什麼s和s2調用的是同一個show函數而打印出來的數據內容卻不一樣??
(以後講到)
3.2 聯合的不同之處
(1)定義聯合變量的時候可以省略union關鍵字
(2)支持匿名聯合
如:
union un/*un是聯合類型名*/{..};
[union] un u;
union{...}; 匿名聯合
3.3 枚舉的不同之處
(1)枚舉類型在定義變量時也可以省略enum關鍵字
(2)C語言的枚舉 本質上就是整型,可以使用整數進行賦值
C++中的枚舉 是一種獨立的數據類型,不能使用整數進行賦值
(int類型的值域 比 枚舉類型的大)
4.布爾類型以及運算符的別名
4.1 布爾類型
C語言中:
bool #include<stdbool.h>
int
C++中:
bool類型是C++中的基本數據類型,bool類型的值有兩個:true 和 false,其本質上就是 1 和 0
bool類型本質上就是一個單字節整數,任何基本數據類型都可以被隱式地轉換為bool類型
小結:
bool類型定義變量,可以作為函數的參數和返回值類型,當然也可以定義指針類型
4.2 運算符別名
&& & | ||
^ 異或運算符 不同為真,相同為假
作業:
查詢手冊string類型中的各種函數,嘗試著去使用string類型中的各種函數
如:
string s;
s.c_str();
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-10/124072p2.htm