国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++學(xué)習(xí)筆記

2019-11-06 07:19:52
字體:
供稿:網(wǎng)友
> (1)定義常量 const datatype CONSTANTNAME=value;例如定義一個int常量,其值是1;const int CONSTNUMBER=1;[一般常量我們喜歡用大寫字母表示](2)指數(shù)運(yùn)算符。pow(a,b)用來計算a的b次方是多少!pow是在cmath庫文件中定義的函數(shù)。(3)數(shù)值類型的轉(zhuǎn)換通過使用轉(zhuǎn)換運(yùn)算符static_cast<type>(value);注意:類型轉(zhuǎn)換并不改變被轉(zhuǎn)換變量的值。例如:double d=5.5;int i=static_cast(5.5);轉(zhuǎn)換完之后的i=5,d依舊是5.5;(4)string字符串的輸入c++在string頭文件中提供了getline函數(shù),默認(rèn)情況下,輸入是以空白字符結(jié)束,如果你想輸入Happy New Year就必須使用getline函數(shù)。具體使用示例:string city;cout<<"enter your city name"<<endl;getline(cin,city,'/n');//這表示以'/n’來表示輸入,由于第三個參數(shù)默認(rèn)值是'/n’,所以可以省略,變成getline(cin,city);(5)函數(shù)原型。如果main函數(shù)在前,而main函數(shù)要使用的函數(shù)在main函數(shù)之后才定義,需要在程序中聲明要使用的函數(shù)的原型。#include<iostream>using namspace std;int test(int i);//這就是函數(shù)原型int main(){......test(5);return 0;}int test(int i){rerurn i;}(6)缺省參數(shù)缺省參數(shù)就相當(dāng)于默認(rèn)參數(shù)。例如:void test(int i=5){......}如果調(diào)用這個函數(shù)時沒有傳入?yún)?shù)I是多少,則默認(rèn)是5。(7)數(shù)組的聲明和初始化。例如:int mylist[2]={2,3};不能這樣子。int mylist[2];mylist={2,3}因?yàn)閿?shù)組的初始化語句只能在一條語句中完成。(8)數(shù)組作為函數(shù)參數(shù)。例子:void test(int list[]){............}使用方式:int a[]={2,3,4,5,6};test(a);如果在函數(shù)參數(shù)里面的int list[]前面加上了const就不能在函數(shù)里面修改傳入的數(shù)組。例如:void test(const int list[]){list[0]=100;//出錯,不能修改出入進(jìn)來的數(shù)組的值}(9)數(shù)組不可以作為函數(shù)返回值返回。例如:int [] test(const int list[]){......}c++中是不允許的。如果實(shí)現(xiàn)類似返回數(shù)組的功能可以使用兩個數(shù)組。例如:void test(const int list[],int newlist){for(int i=0;i<list.size();i++){list[i]=newlist[i]}}(10)字符串相關(guān)函數(shù)strlrn(char s[]); 返回字符串的長度,即在空終結(jié)符之前的字符個數(shù)。strcpy(char s1[],const chars2[]); 將字符串s2復(fù)制到s1中去。strncpy(char s1[],char s2[],size_t n); 將字符串s2前n個符號復(fù)制到S1中。strcat(char s1[],const char s2[]);把字符串s2拼接到s1之后。strncat(cgar s1[],char s2[],size_t n); 將字符串s2前n個符號拼接到S1之后。(11)類定義和類實(shí)現(xiàn)的分離。類定義:定義在Circle.h文件之中class Circle{public:double radius;Circle();Circle(double r);double getRadius();}類實(shí)現(xiàn):實(shí)現(xiàn)在Circle.cpp文件之中注意在類文件實(shí)現(xiàn)的文件Circle.cpp文件的頭部要包含以下的文件。#include "Circle.h";Circle::Circle(){ radius=1;}.............(12)使用typedef來定義同類型。例如:typedef int integer; 這樣可以使用integer來聲明int變量。例如:integer a=10; 相當(dāng)于 int a=10;(13) c++中函數(shù)的參數(shù)有按值傳遞和引用傳遞兩種 void test(int n1,int n2){ }//按值傳遞。 void test(int &n1,int $n2){ }//引用傳遞。有什么區(qū)別呢?按值傳遞的方式有很大的局限性。例如函數(shù)swap( ):void swap(int n1,int n2){ cout<<"inside swap and before invoking n1 is''<<n1<<"n2 is"<<n2<<endl;int temp=n1;n1=n2;n2=temp;cout<<"inside swap,after invoking n1 is"<<n1<<"n2 is"<<n2<<endl;}//這是按值傳遞參數(shù),那么來看一下按值傳遞的方式的局限性在哪里。在main函數(shù)中調(diào)用這個函數(shù)。int main(){ int num1=1; int num2=2; cout<<"before nvoking num1 is"<<num1<<"num2 is"<<num2<<endl; swap(num1.num2); cout<<"after invoking num1 is"<<num1<<"num2 is"<<num2<<endl; }輸出結(jié)果是:(1)before nvoking num1 is 1 num2 is 2;(2)inside swap and before invoking n1 is 1 n2 is 2;(3)inside swap after invoking n1 is 2 n2 is 1;(4)after nvoking num1 is 1 num2 is 2;可以看到只是函數(shù)內(nèi)部的n1和N2被交換了值,而num1和num2在調(diào)用之前和調(diào)用之后的值依舊不變。這是因?yàn)閷?shí)際上num1和num2的值被傳遞給了n1和n2。當(dāng)n1和n2有了值以后在內(nèi)存中的地址與num1和num2的地址是不一樣的,所以改變n1,n2的值與num1和num2無關(guān)。【按值傳遞的局限性就體現(xiàn)在了這里】既是把swap函數(shù)變成了swap(int num1,int num2){.......}//把傳入的參數(shù)的名字變成num1,num2.也還是一樣的結(jié)果,這與參數(shù)名字無關(guān)。所以可以采用引用傳遞來實(shí)現(xiàn)交換之后num1和num2的值也變了。了解引用傳遞之前,先來了解一下引用變量。引用變量是一種特殊的變量,可以通過引用變量來訪問和修改存儲在變量中的原數(shù)據(jù)。聲明一個引用變量,可以在變量名前或者是數(shù)據(jù)類型之后加上一個'&'符號。例如:int &r; int& r;【一般采用這一種】把swap函數(shù)變成swap(int& n1,int& n2){......}這樣調(diào)用swap函數(shù)之后的num1和num2就會交換數(shù)據(jù)了。(14)指針學(xué)習(xí)理解指針第一步: 聲明指針只需要在聲明指向的數(shù)據(jù)類型之后加上*。 例如 int a;【聲明一個int類型的變量a】 int * a;【聲明了一個指向int類型數(shù)據(jù)的內(nèi)存地址的指針a】 指針變量保存的是內(nèi)存地址,運(yùn)算符*可以訪問指針指向的內(nèi)存地址的數(shù)據(jù)。 &是地址運(yùn)算符。 假設(shè)定義了一個指針 int * count,則&count是count的地址。 可以使用&將一個指針的地址賦給另一個指針。 例如: pcount=&count; 指針可以在聲明是賦值,也可以在聲明之后賦值。第二步: 常量指針。 常量指針指向的是一個不變的內(nèi)存位置,但是該內(nèi)存位置處的實(shí)際值是可以更改的。 聲明一個常量指針 int const * p;p就是一個常量指針。 可以修改p指向的內(nèi)存地址的值,例如*p=10; 也可以使得一個常量指針指向內(nèi)存位置處的實(shí)際值不可以改變,變成了const int const * p=10; 第一個const是常量數(shù)據(jù),第二個const是常量指針。第三步: 函數(shù)調(diào)用的時候傳遞指針參數(shù)。 繼續(xù)來講swap函數(shù),下面定義兩個swap函數(shù),分別為swap1(),swap2()。 swap1(int* p1,int* p2){ int temp=*p1; *p1=*p2; *p2=temp; }//相當(dāng)于按值傳遞 swap2(int* &p1,int* &p2){ int* temp=p1; p1=p2; p2=temp; }//相當(dāng)于引用傳遞,唯一需要注意的是int * &p1之后是地址的傳遞,不是值的傳遞了!!!再說一前面說數(shù)組傳參數(shù)的問題。void test(int list[])可以被替換為void test(int* list,int size);也就是說函數(shù)中的數(shù)組參數(shù)都可以用指針參數(shù)來替換。第四步:從函數(shù)中返回指針。例如:int* reverse(int* list,int size){for(int i=0,j=size-1;i<j;i++,j--){int temp=lits[j];list[j]=list[i];list[i]=temp;}return list;}相對應(yīng)的原型可以寫成。int* reverse(int* list,int size);第五步:對象指針。定義一個類Cricle,其內(nèi)有成員函數(shù)getName(){return this.name;}定義一個對象指針。Cricle* p;指針訪問的成員函數(shù)和成員變量使用符號’->'。例如:p->getName();第六步:this指針指向被調(diào)用的對象本身。(15)內(nèi)存分配問題。c++支持動態(tài)內(nèi)存分配,這使得我們能動態(tài)的分配持久的內(nèi)存空間,動態(tài)內(nèi)存的分配使用new操作符。如下:int* p=new int(4);釋放內(nèi)存使用delete。如下: delete p;注意,如果有一個內(nèi)存是為了一個數(shù)組所分配的,為了正確的釋放內(nèi)存,則需在關(guān)鍵字delete和指針間加上符號[].如下:delete [] p;還需要注意的一點(diǎn)事delete只能用于那些指向new操作符創(chuàng)建的內(nèi)存的指針。例如一下采用delete來刪除一個不是由new創(chuàng)建的內(nèi)存空間就會導(dǎo)致錯誤。int x=10;int * p=&x;delete p;//出錯。(16)析構(gòu)函數(shù)。析構(gòu)函數(shù)是在對象被銷毀的時候調(diào)用的,創(chuàng)建一個析構(gòu)函數(shù)只需要在方法前面加上符號‘~’。(17)struct學(xué)習(xí)總結(jié)。數(shù)組中的數(shù)據(jù)的類型必須是一樣的,但是struct中的的數(shù)據(jù)類型可以是任意的。定義一個struct。方式如下:struct Address{ string name; string number;.........};//與類的定義基本一致,class Address{ .......}struct的使用方式和class也基本相似。如下使用struct Address。void f( ){Address jd;id.name='xza';}但是例如以上的使用方式并不是常用的。最常用的方式是使用結(jié)構(gòu)指針,如下:void PRitnAddress(Address* p){ cout<<p->name<<endl;}另外需要注意的是:(1)結(jié)構(gòu)體變量可以在定義的時候指定初始值。例如:Address q={beijing,3457890}另外結(jié)構(gòu)體也可以變成結(jié)構(gòu)體數(shù)組,例如:Address a[3];它表示是定義了一個數(shù)組,數(shù)組存放的數(shù)據(jù)類型是Address,數(shù)組名字是a,他的長度為3。(2)c++中struct和類的區(qū)別在于struct不能有方法,所有成員是public的。(3)可以在聲明struct的時候聲明一個struct實(shí)例。方法如下:struct Address{ string name; string number;} adr; (18)模板學(xué)習(xí)。 例如下面的兩個函數(shù)就可以抽象成模板。 int max(int x,int y){ return x>=y? x,y; } double max(double x,double y){ return x>=y? x,y; }因?yàn)檫@兩個函數(shù)的功能是一樣的,只是傳入的參數(shù)的數(shù)據(jù)類型和返回的數(shù)據(jù)類型不一樣而已。抽象成模板如下:template<typename T>//注意這里沒有用';'結(jié)尾。T max(T x,T y){ return x>=y? x,y;}其中template<typename T>是模板前綴,其中的T是類型參數(shù)。[類似于java中的泛型]同時,可能一個模板函數(shù)有多個類型參數(shù),則可以這樣寫,template<typename T1,typename T2,typename T3>另外,需要注意的是模板函數(shù)是按值傳遞的。按引用傳遞的話可以將模板函數(shù)參數(shù)設(shè)置成為以下例子中所示的格式。例子:template<typename T1> T test(const T& value1,const T& value2){ ....................... }提升知識:模板類模板類例如:template<typename T>calss Address{T name;T getName();}//構(gòu)造函數(shù)template<typename T>Address<T>::Adress(){}template<typename T>T Address<T>::getName(){}需要注意的是模板類不能分開定義和實(shí)現(xiàn)。同時每一個具體實(shí)現(xiàn)函數(shù)之前都需要加上template<typename T>,同時在實(shí)現(xiàn)的方法中要在類之后加上<T>,如上兩個函數(shù)一樣。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 汽车| 泰宁县| 鸡泽县| 清丰县| 张北县| 渝北区| 开化县| 潜江市| 灌南县| 祁阳县| 疏勒县| 古交市| 宜丰县| 宁阳县| 柳河县| 武邑县| 共和县| 葫芦岛市| 铁岭市| 元谋县| 平远县| 和硕县| 赤峰市| 辉县市| 东光县| 桐庐县| 图木舒克市| 临夏县| 探索| 子长县| 康马县| 泽库县| 张家界市| 巴楚县| 红原县| 淄博市| 墨脱县| 涿鹿县| 伽师县| 龙里县| 江孜县|