2 初識c++
3 c++對c語言增強以及擴充套件
4 const 鏈結屬性
5 const 分配記憶體情況
6 物件導向和面向過程
7 擴充套件閱讀
1. 物件導向
2. 泛型程式設計
ansi在1998制定出c++第一套標準(c++98)
封裝、繼承、多型
#include
// 標準輸入輸出流
using
namespace std;
// 標準命名空間
::
// 雙冒作用域運算子
std::cout;
// std作用域下的cout
::a;
// ::前面什麼都不新增 代表全域性作用域
命名空間的用途?
解決名稱衝突問題命名空間下可以存放什麼?
變數、函式、結構體、類…命名空間必須要宣告在全域性作用域
命名空間可以巢狀命名空
namespace a
}int a = a::a_;
// 命名空間a下的a_
int a = a::b::a_;
// 命名空間a中命名空間b下的a_
命名空間是開放的,可以隨時將新成員新增到命名空間下
namespace a
namespace b
namespace a
// 相當於
namespace a
;namespae b
命名空間可以匿名的
namespace
// 相當於全域性變數,直接使用
cout <<
"a_ = "
<< a_ <<
" b_ = "
<< b_ << endl;
命名空間可以起別名
namespace longname
void
test()
1.using 命名空間名::成員名;2.當使用using宣告去宣告了乙個命名空間中的變數,在函式中有乙個相同的變數名,會報錯,盡量避免
namesapce person
void
test()
1.using namespace 命名空間名;2.當using編譯指令 與 就近原則同時出現,優先使用就近原則
3.當using編譯指令有多個,需要加作用域 區分
namespace person
namespace dog
// 第一種情況
void
test1()
// 第二種情況
void
test2()
int a;
int a =10;
// 在c語言中,可以這樣使用,相當於賦值 int a; a = 10;
// 在c++語言中,編譯錯誤
c語言:返回值沒有檢測 形參型別沒有檢測 函式呼叫引數個數沒有檢測c++語言:返回值檢測、形參型別檢測、函式呼叫引數個數
// 在c語言中
// 1 函式的返回值沒有檢測
// 2 形參型別沒有檢測
// 3 函式呼叫引數個數沒有檢測
getrects
( w , h)
void
test()
c語言:char * p = malloc(64);c++語言:char * p = (char *)malloc(64);
// malloc返回型別為void*,在c語言中可以這樣使用
void
test()
// 在c++語言中必須強轉
void
test()
c語言:結構體中不可以有函式,建立結構體變數不可以簡化structc++語言:結構體中可以有函式,建立結構體變數可以簡化struct
struct person
;// 1.c++可以在結構體中放函式
// 2.建立結構體變數,可以簡化關鍵字struct
void
test()
c++才有bool型別
// c++才有bool型別
// 代表真 --- 1 true 假 ---- 0 false
bool flag;
// true/false
c語言:返回的是值,只能做左值c++語言:返回的是變數,可以做左值,也可以做右值
int a =10;
int b =20;
int c;
//c語言下返回的是值,只能做左值
c = a > b ? a : b;
// c = 20
// a > b ? a : b = 100 相當於 20 = 100; 錯誤
*(a > b ?
&a :
&b)=
100;
// b = 100
//c++語言下返回的是變數,可以做左值,也可以做右值
a > b ? a : b =
100;
// 返回b, b = 100;
c語言:全域性 const 直接修改->失敗 ,間接修改(通過指標) ->語法通過,執行失敗
區域性 const 直接修改 ->失敗 ,間接修改(通過指標)-> 成功
int arr[a]; 在c語言下 const是偽常量,不可以初始化陣列
c++語言:
全域性 const 和c結論一樣
區域性 const 直接修改->失敗 ,間接修改(通過指標)-> 失敗
int arr[b]; c++中const可以稱為常量,可以初始化陣列
// c語言下
// 全域性const 直接修改 失敗 間接修改(通過指標) 語法通過,執行失敗
// 區域性 const 直接修改 失敗 間接修改(通過指標) 成功
// int arr[a]; 在c語言下 const是偽常量,不可以初始化陣列
const
int a =20;
// 全域性
void
test1()
// c++語言下
// 全域性 const 和c結論一樣
// 區域性 const 直接修改失敗 間接修改(通過指標) 失敗
// c++中const可以稱為常量,可以初始化陣列
const
int c =20;
// 全域性
void
test2()
c語言下 const修飾的全域性變數預設是外部鏈結屬性c++下 const修飾的全域性變數預設是內部鏈結屬性,可以加extern 提高作用域
// test.cpp 檔案
// c語言中
const
int g_a =
100;
// c++語言中
extern
const
int g_b =
100;
//預設是內部鏈結屬性 可以加關鍵字 extern 提高作用域
// 使用全域性變數g_a,c和c++一樣
void
test()
對const變數取位址 ,會分配臨時記憶體使用普通變數來初始化const變數,棧記憶體(可通過間接方式修改const變數)
對於自定義資料型別,棧記憶體(可通過間接方式修改const變數)
//1、對const變數取位址,會分配臨時記憶體
void
test01()
//2、使用普通變數來初始化const變數
void
test02()
//3、對於自定義資料型別
struct person
;void
test03()
物件導向: 狗.吃(**)
面向過程: 吃(狗,**)
盡量用const代替definedefine出的巨集常量,沒有資料型別、不重視作用域(不進行編譯,在預處理階段展開)
#difine flag 10
// 用const代替define
const
int flag =
10;
C 對C的加強
c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...
C 對C的加強
c 是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c 擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c 就適應的問題規模而論,大小由之。c 不僅擁有計算機高效執行的實用性特徵,...
c 對c的加強
1.register關鍵字的加強 register修飾符暗示編譯程式相應的變數將被頻繁地使用,如果可能的話,應將其儲存在cpu的暫存器中,以加快其儲存速度,這只是一種請求,編譯器可以拒絕這種申請。1 register變數必須是能被cpu所接受的型別。這通常意味著register變數必須是乙個單個的值...