目錄
一、c++概述
二、初識c++
1、第一個c++程序
?2、c++面向?qū)ο蟮娜筇匦裕ㄖ匾?/p>
三、作用域運算符::
1、使用關(guān)鍵字namespace創(chuàng)建一個命名空間
2、命名空間只能定義在全局
3、 命名空間嵌套
?4、隨時將新的成員加入命名空間
5、命名空間中 函數(shù)的聲明和實現(xiàn)分開?
?6、無名命名空間
?7、命名空間取別名
8、使用using申明命名空間中的某幾個成員可用?
出現(xiàn)的問題1: 重復定義
遇到函數(shù)重載(函數(shù)名相同,形參不同):
9、using聲明整個命名空間
?五、類型增強
1、全局變量檢測增強
2、c++的函數(shù)形參必須有類型
3、c++中函數(shù)如果沒有參數(shù),必須寫void
4、更嚴格的類型轉(zhuǎn)換
5、結(jié)構(gòu)體類型增強(重要)
?6、c++新增bool類型
7、 三目運算符增
六、c++中的const
七、引用
1、引用的定義
2、引用作為函數(shù)的參數(shù)?
3、引用作為函數(shù)的返回值類型?
4、 常引用
?八、inline內(nèi)聯(lián)函數(shù)
1、內(nèi)聯(lián)函數(shù)概述
2、 宏函數(shù)和內(nèi)聯(lián)函數(shù)的區(qū)別
3、內(nèi)聯(lián)函數(shù)條件
4、內(nèi)聯(lián)函數(shù)的注意事項
九、函數(shù)重載
1、函數(shù)重載的概念
2、函數(shù)重載的條件
十、缺省函數(shù)
十一、占位參數(shù)
一、c++概述
???????C++是對C的擴展,任何有效的c程序都是有效的c++程序,c++程序可以使用已有的c程序庫。
C++語言在c語言的基礎(chǔ)上添加了面向?qū)ο缶幊毯头盒途幊?/strong>的支持。c++融合了3種不同的編程方式:c語言代表的過程性語言.c++在c語言基礎(chǔ)上添加的類代表的面向?qū)ο笳Z言.c++模板支持的泛型編程。我們常常將這兩門語言統(tǒng)稱為“C/C++”。
c編程思想:面向過程
c++編程思想:面向對象、泛型編程
面向過程(c): 通過分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步 實現(xiàn),并調(diào)用。
面向?qū)ο?c++):面向?qū)ο缶幊?,簡稱oop技術(shù)。算法與數(shù)據(jù)結(jié)構(gòu)被看做是一個整體(對象),程序=對象+對象+對象 +對象????????
c++標準:c++98、c++11
二、初識c++
1、第一個c++程序
????????#include:預(yù)編譯指令.引入頭文件iostream。?using namespace std:使用標準命名空間,命名空間用關(guān)鍵字namespace來定義。命名空間是.C++的一種機制..用來把單個標識符下的大量有邏輯聯(lián)系的程序?qū)嶓w組合到一起。此標識符作為此組群的名字。?cout<<"hello world"< endl;和printf 功能一樣,輸出字符串"hello world“。
? ? ? 擴展:c++頭文件沒有擴展名。但是有些c語言的頭文件被轉(zhuǎn)換為c++的頭文件,這些文件被重新命名丟掉了擴展名.h[使之成為c++風格頭文件),并在文件名稱前面加上前綴c(表明來自c語言)。例如c++版本的math,h.為 cmath。?
?2、c++面向?qū)ο蟮娜筇匦裕ㄖ匾?/h3>
-
封裝:將相同屬性的數(shù)據(jù)和方法封裝在一起,加權(quán)限區(qū)分,用戶只能借助公共方法操作私有數(shù)據(jù)。
-
繼承:體現(xiàn)在類和類之間的關(guān)系,如果A類繼承于B類,那么A類直接擁有B類的數(shù)據(jù)和方法。
-
多態(tài):一個接口(函數(shù)),多種功能。
三、作用域運算符::
? ? ? ? ::解決局部變量與全局變量的重名問題四、命名空間?
????????創(chuàng)建名字是程序設(shè)計過程中一項最基本的活動,當一個項目很大時,它會不可避免地包含大量名稱,名稱(name)可以是符號常量、變量、函數(shù)、結(jié)構(gòu)、枚舉、類和對象等等。c++允許我們對名字的產(chǎn)生和名字的可見性進行控制。我們之前在學習c語言可以通過static關(guān)鍵字來使得名字只得在本編譯單元內(nèi)可見,在c++中我們將通過一種通過命名空間來控制對名稱的作用域。命名空間的本質(zhì):對符號常量、變量、函數(shù)、結(jié)構(gòu)、枚舉、類和對象等等進行封裝。
1、使用關(guān)鍵字namespace創(chuàng)建一個命名空間
2、命名空間只能定義在全局
3、 命名空間嵌套
?4、隨時將新的成員加入命名空間
5、命名空間中 函數(shù)的聲明和實現(xiàn)分開?
?6、無名命名空間
無命名空間中的標識符只能在本文件內(nèi)訪問,相當于給這個標識符加上了static。
?7、命名空間取別名
8、使用using申明命名空間中的某幾個成員可用?
出現(xiàn)的問題1: 重復定義
?若using A::num放在外部,作為全局變量,就不會重復定義。
遇到函數(shù)重載(函數(shù)名相同,形參不同):
namespace A {
void fun()
{
cout << "A中fun void" << endl;
}
void fun(int a)
{
cout << "A中fun int" << endl;
}
void fun(int a,int b)
{
cout << "A中fun int int" << endl;
}
}
void test()
{
//函數(shù)重載,命名空間中所有同名函數(shù)都被聲明可用
using A::fun();
fun();
fun(10);
fun(10, 10);
}
9、using聲明整個命名空間
加作用域解決沖突:
?五、類型增強
1、全局變量檢測增強
int a;//沒有賦值,當作聲明
int a=10;//賦值,當作定義
此代碼在c++中編譯失敗,在c下編譯通過。
2、c++的函數(shù)形參必須有類型
c語言:允許函數(shù)形參無類型(可以傳任意參數(shù)),c++不允許。
//i沒有寫類型,可以是任意類型
int fun1(i)
{
printf("%d\n", i);
return 0;
}
//i沒有寫類型,可以是任意類型
int fun2(i)
{
printf("%s\n", i);
return 0;
}
此代碼在c++中編譯失敗,在c下編譯通過。
3、c++中函數(shù)如果沒有參數(shù),必須寫void
????????在C語言中,int fun()表示返回值為int,接受任意參數(shù)的函數(shù),int fun(void)表示返回值為int的無參函數(shù)。在C++中..int fun(和 int fun(void)具有相同的意義.都表示返回值為int的無參函數(shù)。
/沒有寫參數(shù),代表可以傳任何類型的實參
int fun()
{
printf("fun函數(shù)\n");
return 0;
}
int main(int argc, char *argv[])
{
fun(10);
fun(10, 20);
fun("hello");
return 0;
}
此代碼在c++中編譯失敗,在c下編譯通過,若加上void,c編譯也不通過。故無參數(shù)建議寫void。?
4、更嚴格的類型轉(zhuǎn)換
c語言中枚舉變量(底層是數(shù)字)允許賦其他int類型的值,c++不允許
5、結(jié)構(gòu)體類型增強(重要)
?6、c++新增bool類型
????????標準c++的 bool類型有兩種內(nèi)建的常量true(轉(zhuǎn)換為整數(shù)1)和 false(轉(zhuǎn)換為整數(shù)0)表示狀態(tài)。這三個名字都是關(guān)鍵字。bool類型只有兩個值,true(1 值),false(0值) bool類型占1個字節(jié)大小給bool類型賦值時,非0值會自動轉(zhuǎn)換為true(1),0值會自動轉(zhuǎn)換false(0)
7、 三目運算符增
六、c++中的const
1、c++和c中的const都是修飾變量為 只讀。
2、c語言 嚴格遵循?const修飾的是只讀變量,但可以通過指針修改其值。
?3、c++的const 會對變量 優(yōu)化,不可以通過指針修改其值。
????????如果以常量初始化const修飾的變量 編譯器會將變量的值 放入符號常量表中,不會立即給變 量開辟空間,只有當對a 取地址時 編譯器才會給a開辟空間(只讀變量)
通過指針變量p 訪問空間內(nèi)容*p取的是空間的值。通過變量名a 訪問的是符號常量表中的值?。
?4、如果以變量初始化const修飾的只讀變量,沒有符號常量表,立即開辟空間,可以通過指針修改其值。
?5、如果以const修飾的是自定義類型的變量 也不會有符號常量表,立即開辟空間,可以通過指針修改其值。
?6、c++中盡量使用const代替define
//#define A 10
const int A=10;
- const有類型,可進行編譯器類型安全檢查。#define無類型,不方便進行類型檢查
- const有作用域,而#define不重視作用域,宏不能作為命名空間、結(jié)構(gòu)體、類的成員,而const可以
七、引用
1、引用的定義
????????引用是c++對c的重要擴充。在c/c++中指針的作用基本都是一樣的,但是c++增加了另外一種給函數(shù)傳遞地址的途徑,這就是按引用傳遞(pass-by-reference).
引用的本質(zhì):給變量名取別名????????
引用的步驟:T &別名?= 變量名;(T為任意類型)
普通變量引用?:
?數(shù)組引用:
指針變量引用:
函數(shù)引用:
?注:引用(取別名)只有一次
2、引用作為函數(shù)的參數(shù)?
????????節(jié)約空間,函數(shù)內(nèi)部可以 通過 引用 操作外部變量。
3、引用作為函數(shù)的返回值類型?
?以鏈式操作舉例:
4、 常引用
????????給常量取別名
舉例:
常引用 作為函數(shù)的參數(shù):防止函數(shù)內(nèi)部修改外部的值:
?
?八、inline內(nèi)聯(lián)函數(shù)
1、內(nèi)聯(lián)函數(shù)概述
????????內(nèi)聯(lián)函數(shù):在編譯階段 將內(nèi)聯(lián)函數(shù)中的函數(shù)體替換函數(shù)調(diào)用處。避免函數(shù)調(diào)用時的開銷。
注:內(nèi)聯(lián)函數(shù) 必須在定義的時候 使用關(guān)鍵字inline修飾, 不能在聲明的時候使用inline
2、 宏函數(shù)和內(nèi)聯(lián)函數(shù)的區(qū)別
宏函數(shù)和內(nèi)聯(lián)函數(shù) 都會在適當?shù)奈恢?進行展開避免函數(shù)調(diào)用開銷。
宏函數(shù)的參數(shù)沒有類型,不能保證參數(shù)的完整性。
內(nèi)聯(lián)函數(shù)的參數(shù)有類型,能保證參數(shù)的完整性。
宏函數(shù)在預(yù)處理階段展開
內(nèi)聯(lián)函數(shù)在編譯階段展開
宏函數(shù)沒有作用域的限制,不能作為命名空間、結(jié)構(gòu)體、類的成員
內(nèi)聯(lián)函數(shù)有作用域的限制,能作為命名空間、結(jié)構(gòu)體、類的成員
3、內(nèi)聯(lián)函數(shù)條件
不能存在任何形式的循環(huán)語句
不能存在過多的條件判斷語句
函數(shù)體不能過于龐大
不能對函數(shù)取地址
4、內(nèi)聯(lián)函數(shù)的注意事項
- 在內(nèi)聯(lián)函數(shù)定義的時候加inline修飾
- 類中的成員函數(shù) 默認都是內(nèi)聯(lián)函數(shù)(不加inline 也是內(nèi)聯(lián)函數(shù))
- 有時候加上inline也不一定是內(nèi)聯(lián)函數(shù),不加inline修飾也有可能是內(nèi)聯(lián)函數(shù)。 由編譯器根據(jù)內(nèi)聯(lián)條件決定。
九、函數(shù)重載
1、函數(shù)重載的概念
????????在傳統(tǒng)c語言中,函數(shù)名必須是唯一的,程序中不允許出現(xiàn)同名的函數(shù)。在c++中是允許出現(xiàn)同名的函數(shù),這種現(xiàn)象稱為函數(shù)重載。函數(shù)重載的目的就是方便使用函數(shù)名。
????????函數(shù)重載:用同一個函數(shù)名 代表不同的函數(shù)功能。
????????函數(shù)重載 是c++的靜態(tài)多態(tài)的特性。
2、函數(shù)重載的條件
同一作用域,函數(shù)的參數(shù)類型、個數(shù)、順序不同都可以重載
注:返回值類型不能作為重載的條件
c++中 不能直接將函數(shù)名作為函數(shù)的入口地址?:函數(shù)名和參數(shù) 共同決定函數(shù)的入口地址
十、缺省函數(shù)
????????C++在聲明函數(shù)原型的時可為一個或者多個參數(shù)指定默認(缺省)的參數(shù)值當函數(shù)調(diào)用的時候如果沒有指定這個值,編譯器會自動用默認值代替。
?注:如果函數(shù)的某個參數(shù)設(shè)置為默認參數(shù), 那么這個參數(shù)的右邊的所有參數(shù) 都必須是默認參數(shù)。
十一、占位參數(shù)
????????重載++運算符,適用于函數(shù)名及參數(shù)形同的重載。
?占位參數(shù) 也可以是缺省參數(shù)(默認參數(shù)),但使用時容易產(chǎn)生二義性文章來源:http://www.zghlxwxcb.cn/news/detail-603346.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-603346.html
到了這里,關(guān)于C++面向?qū)ο蟪绦蛟O(shè)計-基礎(chǔ)入門(超詳細)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!