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