【C++从入门到入土】第一篇:从C到C++
文章目錄
- 前言
- 一、C++是什么?
- 二、C++基礎(chǔ)
- 1、輸入輸出特點(diǎn)和用法
- 2、數(shù)據(jù)類型與表達(dá)式
- C++中的數(shù)據(jù)類型
- 基本數(shù)據(jù)類型
- 構(gòu)造數(shù)據(jù)類型
- 3、動態(tài)內(nèi)存管理
- 用new運(yùn)算符實(shí)現(xiàn)動態(tài)內(nèi)存分配
- 用delete運(yùn)算符釋放動態(tài)分配的內(nèi)存
- 4、函數(shù)重載
- 函數(shù)的缺省參數(shù)
- 5、內(nèi)聯(lián)函數(shù)
- 6、引 用
- 引用作為函數(shù)的返回值
- 7、常 量
- 總結(jié)
前言
面向?qū)ο笫鞘裁?#xff1f;很難嗎?面向?qū)ο笥惺裁春锰?#xff1f;
讓我們先了解一下C++入門基礎(chǔ)
一、C++是什么?
-
C++是C語言的繼承,它既可以進(jìn)行C語言的過程化程序設(shè)計(jì),又可以進(jìn)行以抽象數(shù)據(jù)類型為特點(diǎn)的基于對象的程序設(shè)計(jì),還可以進(jìn)行以繼承和多態(tài)為特點(diǎn)的面向?qū)ο蟮某绦蛟O(shè)計(jì)。
-
C++擅長面向?qū)ο蟪绦蛟O(shè)計(jì)的同時(shí),還可以進(jìn)行基于過程的程序設(shè)計(jì),因而C++就適應(yīng)的問題規(guī)模而論,大小由之。
-
C++不僅擁有計(jì)算機(jī)高效運(yùn)行的實(shí)用性特征,同時(shí)還致力于提高大規(guī)模程序的編程質(zhì)量與程序設(shè)計(jì)語言的問題描述能力
二、C++基礎(chǔ)
1、輸入輸出特點(diǎn)和用法
輸入流:cin處理標(biāo)準(zhǔn)輸入,即鍵盤輸入;
輸出流:cout處理標(biāo)準(zhǔn)輸出,即屏幕輸出。
cin:istream對象,標(biāo)準(zhǔn)輸入
cout:ostream對象,標(biāo)準(zhǔn)輸出
cerr:標(biāo)準(zhǔn)錯(cuò)誤。用來輸出警告和錯(cuò)誤信息給程序的使用者
clog:用于產(chǎn)生程序執(zhí)行的一般信息
cout<<表達(dá)式<<表達(dá)式<<……
其中:表達(dá)式可以是變量、常量、以及由各種運(yùn)算符連接起來的運(yùn)算表達(dá)式。
cin>>表達(dá)式>>表達(dá)式>.……
其中:表達(dá)式只能是變量或內(nèi)存區(qū)
代碼如下:
//輸入2個(gè)整數(shù)求和 #include<iostream> int main() {std::cout<<“Enter_two_numbers”<<std::endl;intv1,v2;std::cin>>v1>>v2;std::cout<<“the_sum_of”<<v1<<“and”<<<<“is”<<v1+v2<<std::endl;return0; }解釋:std是一個(gè)命名空間,cout和cin是里面的變量名,命名空間是C++為了防止命名沖突,把自己庫里面的東西都定義在一個(gè)std的命名空間中要使用標(biāo)準(zhǔn)庫里面的東西。::是類作用域解析符,使用它可以訪問類里面的元素。
2、數(shù)據(jù)類型與表達(dá)式
C++中的數(shù)據(jù)類型
基本數(shù)據(jù)類型
字符類型:char、unsignedchar
短整型:short、unsignedshort
整型:int、unsignedint
長整型:long、unsignedlong
單精度浮點(diǎn)型:float、unsignedfloat
雙精度浮點(diǎn)型:double、unsigneddouble
邏輯類型:bool
類型轉(zhuǎn)換與C語言相同
構(gòu)造數(shù)據(jù)類型
枚舉類型:enumcolor{red,green,blue,yellow};
數(shù)組類型:intdata[128];
指針類型:intp;
結(jié)構(gòu)體類型:structstudent
{
char name[16];
bool sexy;
};
聯(lián)合類型:union value{inti;intp};
引用類型:intvalue;int&p=value;
類類型
class Clock
{
private:
int hour,minute,second;
public:
…
}
3、動態(tài)內(nèi)存管理
用new運(yùn)算符實(shí)現(xiàn)動態(tài)內(nèi)存分配
- 第一種用法,分配一個(gè)變量:
P = new T;
T是任意類型名,P是類型為T *的指針。
動態(tài)分配出一片大小為sizeof(T)字節(jié)的內(nèi)存空間,并且將該
內(nèi)存空間的起始地址賦值給P。比如:
- 第二種用法,分配一個(gè)數(shù)組:
P = new T[N];
T : 任意類型名
P : 類型為T *的指針
N : 要分配的數(shù)組元素的個(gè)數(shù),可以是整型表達(dá)式 動態(tài)分配出一片大小為sizeof(T)*N字節(jié)的內(nèi)存空間,并且將該內(nèi)存空間的起始地址賦值給P。
動態(tài)分配數(shù)組示例:
用delete運(yùn)算符釋放動態(tài)分配的內(nèi)存
- 用“new”動態(tài)分配的內(nèi)存空間,一定要用“delete”運(yùn)算符進(jìn)行釋放
delete 指針;//該指針必須指向new出來的空間
- 用“delete”釋放動態(tài)分配的數(shù)組,要加“[]” delete [ ] 指針;//該指針必須指向new出來的數(shù)組
做一個(gè)例題
下面小段程序,哪個(gè)是正確的:
A)char * p = new int;
p = ‘a(chǎn)’;
delete p;
B) int *p = new int[25];
p[10] = 100;
delete p;
C) char * p = new char[10];
p[0] = ‘K’;
delete [] p;
答案選C
因?yàn)锳開辟int型空間卻賦值給char類型指針,錯(cuò)誤用法
B選項(xiàng)釋放數(shù)組忘記在數(shù)組名前加"[]"
注意:用delete釋放的內(nèi)存空間必須是由new分配的空間,否則執(zhí)
行delete時(shí)將會導(dǎo)致嚴(yán)重的錯(cuò)誤。
4、函數(shù)重載
定義:兩個(gè)及以上的函數(shù),具有相同的函數(shù)名,但是形參的個(gè)數(shù)或者類型不同,編譯器會根據(jù)實(shí)參的類型及個(gè)數(shù)的最佳匹配來自動確定調(diào)用哪一個(gè)函數(shù)。
注意:不能以形參名字或函數(shù)返回類型的不同來區(qū)分函數(shù)。
(1) int Max(double f1,double f2) { }
(2) int Max(int n1,int n2) { }
(3) int Max(int n1,int n2,int n3) { }
Max(3.4,2.5); //調(diào)用 (1)
Max(2,4); //調(diào)用 (2)
Max(1,2,3); //調(diào)用 (3)
Max(3,2.4); //error,二義性
函數(shù)的缺省參數(shù)
C++中,定義函數(shù)的時(shí)候可以讓最右邊的連續(xù)若干個(gè)參
數(shù)有缺省值,那么調(diào)用函數(shù)的時(shí)候,若相應(yīng)位置不寫參
數(shù),參數(shù)就是缺省值。
- 函數(shù)參數(shù)可缺省的目的在于提高程序的可擴(kuò)充性。
- 即如果某個(gè)寫好的函數(shù)要添加新的參數(shù),而原先那些調(diào)用該函數(shù)的語句,未必需要使用新增的參數(shù),那么為了避免對原先那些函數(shù)調(diào)用語句的修改,就可以使用缺省參數(shù)。
- 默認(rèn)形參值必須按照從右向左的順序聲明。在有默認(rèn)值的形參右邊,不能出現(xiàn)無默認(rèn)值的形參。
- 在相同的作用域內(nèi),默認(rèn)形參值的說明應(yīng)保持唯一;但在不同的作用域內(nèi),允許說明不同的默認(rèn)形參值。
5、內(nèi)聯(lián)函數(shù)
來看一個(gè)宏定義
#define abs(a) ((a) < 0 ? –(a):(a)) int main() {int m = -2, ret=abs(++m); abs(++m);ret=((++m) < 0 ? –(++m) : (++m))return 0; }- 最后ret的值為是0。問題出在編譯器在遇到宏時(shí)只是進(jìn)行簡單的
宏替換。 - 宏的好處是沒有類似于普通函數(shù)調(diào)用時(shí)的系統(tǒng)開銷, 并且宏定義的參數(shù)可以適宜大多數(shù)類型的數(shù)據(jù)。
- 宏定義也有缺點(diǎn):有時(shí)會產(chǎn)生不可預(yù)料的副作用
C++中的內(nèi)聯(lián)函數(shù)既具有宏定義的優(yōu)點(diǎn),又克服了宏定義的缺點(diǎn)。
- 函數(shù)調(diào)用是有時(shí)間開銷的。如果函數(shù)本身只有幾條語句,執(zhí)行非常快,而且函數(shù)被反復(fù)執(zhí)行很多次,相比之下調(diào)用函數(shù)所產(chǎn)生的這個(gè)開銷就會顯得比較大。
- 為了減少函數(shù)調(diào)用的開銷,引入了內(nèi)聯(lián)函數(shù)機(jī)制。編譯器處理對內(nèi)聯(lián)函數(shù)的調(diào)用語句時(shí),是將整個(gè)函數(shù)的代碼插入到調(diào)用語句處,而不會產(chǎn)生調(diào)用函數(shù)的語句。
- 定義內(nèi)聯(lián)函數(shù)使用關(guān)鍵字inline。
注意事項(xiàng):
- 并非所有函數(shù)都需要定義為內(nèi)聯(lián)函數(shù),一般只會將那 些頻繁被調(diào)用的,并且函數(shù)體較小的(只有幾條語句) 函數(shù)定義為內(nèi)聯(lián)函數(shù)。
- 內(nèi)聯(lián)函數(shù)內(nèi)不允許有循環(huán)語句和switch語句,否則按 照普通函數(shù)來處理。
做一個(gè)例題
下面說法正確的是:
A) 多個(gè)重載函數(shù)的參數(shù)個(gè)數(shù)必須不同。
B) 兩個(gè)函數(shù),參數(shù)表相同,返回值類型不同,它們是重載關(guān)系。
C) 調(diào)用一個(gè)第二個(gè)和第三個(gè)參數(shù)都有有缺省值的函數(shù)時(shí),可以不寫第二個(gè)實(shí)參而寫第三個(gè)實(shí)參。
D) 使用內(nèi)聯(lián)函數(shù)的目的是提高程序的運(yùn)行速度。
答案:D
6、引 用
同一個(gè)人,多個(gè)名字,C++叫做引用。
下面的寫法定義了一個(gè)引用,并將其初始化為引用某個(gè)變量。
類型名 & 引用名 = 某變量名;
int n = 4;
int & r = n; // r引用了 n, r的類型是 int &
- 某個(gè)變量的引用,等價(jià)于這個(gè)變量,相當(dāng)于該變量的一個(gè)別名。
- 定義引用時(shí)一定要將其初始化成引用某個(gè)變量。
- 初始化后,它就一直引用該變量,不會再引用別的變量了。
- 引用只能引用變量,不能引用常量和表達(dá)式。
引用主要有以下三種用法:
獨(dú)立引用
作為函數(shù)參數(shù)
作為函數(shù)返回類型
引用應(yīng)用的簡單示例
C語言中,如何編寫交換兩個(gè)整型變量值的函數(shù)?
有了C++的引用
void swap( int & a, int & b) { int tmp; tmp = a; a = b; b = tmp; } int n1, n2; swap(n1,n2) ; // n1,n2的值被交換引用作為函數(shù)的返回值
int n = 4; int & SetValue() { return n; } int main() {SetValue() = 40;cout << n;return 0; }輸出: 40
需要注意的是,因?yàn)榉祷氐囊檬且粋€(gè)存儲單元,所以函數(shù)返回后這個(gè)單元的生命期應(yīng)該不會結(jié)束,否則返回值將沒有意義。
7、常 量
常量是指在程序運(yùn)行過程中,其值不能被改變的量。
如:i=255; area=rr3.14;
在程序中直接使用數(shù)值有兩個(gè)問題:
C++為符號常量提供了const方法,格式為:
const 數(shù)據(jù)類型 符號常量名 = 數(shù)值;
注意:在聲明時(shí)一定要賦初值,而且在程序中間不能改變其值。
用“define”和用“const” 定義符號常量的本質(zhì)區(qū)別:
- 用“#define”定義的符號常量只在編譯時(shí)完成宏替換(簡單的字 符串替換),在程序運(yùn)行期間不占內(nèi)存空間。
- 用“const”定義的符號常量在程序運(yùn)行期間占據(jù)內(nèi)存空間,只是 用const來指明該內(nèi)存空間的只讀約束。
定義常量
const int MAX_VAL = 23 ;
const string SCHOOL_NAME = “Peking University” ;
定義常量指針
- 不可通過常量指針修改其指向的內(nèi)容
- 不能把常量指針賦值給非常量指針,但反過來可以
- 函數(shù)參數(shù)為常量指針時(shí),可避免函數(shù)內(nèi)部不小心改變參數(shù)指針?biāo)傅胤降膬?nèi)容
定義常引用
定義引用時(shí),前面加const關(guān)鍵字,即為“常引用”
int n;
const int & r = n;
r 的類型是 const int &
不能通過常引用修改其引用的變量
常引用和非常引用的轉(zhuǎn)換
const T & 和T & 是不同的類型!!!
T & 類型的引用或T類型的變量可以用來初始化
const T & 類型的引用。
const T 類型的常變量和const T & 類型的引用則
不能用來初始化T &類型的引用,除非進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
總結(jié)
以上就是今天要講的內(nèi)容,本文僅僅介紹了C++入門的簡單知識,雖然C++是公認(rèn)的難學(xué),但以上的入門知識還是簡單的,我們務(wù)必掌握,為以后打好基礎(chǔ),重在堅(jiān)持。歡迎閱讀,感覺大家的指正。
總結(jié)
以上是生活随笔為你收集整理的【C++从入门到入土】第一篇:从C到C++的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nextcloud缩略图尺寸和质量的文档
- 下一篇: C++ 从入门到入土 #1