国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

精品網(wǎng)站建設(shè)平臺(tái)如何自己免費(fèi)制作網(wǎng)站

精品網(wǎng)站建設(shè)平臺(tái),如何自己免費(fèi)制作網(wǎng)站,企業(yè)郵箱要錢(qián)嗎,中鐵集團(tuán)招聘一、C介紹 本賈尼.斯特勞斯特盧普,于1979年在貝爾實(shí)驗(yàn)室負(fù)責(zé)分析UNIX系統(tǒng)內(nèi)核流量的分布情況時(shí),特別希望有一種更加模塊化的工具,于1979.10開(kāi)始著手研發(fā)一款新的編程語(yǔ)言,在C語(yǔ)言的基礎(chǔ)上增加了面向?qū)ο蟮臋C(jī)制,也就是C…

一、C++介紹

? ? 本賈尼.斯特勞斯特盧普,于1979年在貝爾實(shí)驗(yàn)室負(fù)責(zé)分析UNIX系統(tǒng)內(nèi)核流量的分布情況時(shí),特別希望有一種更加模塊化的工具,于1979.10開(kāi)始著手研發(fā)一款新的編程語(yǔ)言,在C語(yǔ)言的基礎(chǔ)上增加了面向?qū)ο蟮臋C(jī)制,也就是C++,1983年完成了C++的第一個(gè)版本

? ? C++與C的關(guān)聯(lián)和重要區(qū)別:

? ? 1、C++完全兼容C語(yǔ)言的所有內(nèi)容

? ? 2、支持面向?qū)ο蟮木幊趟枷?? ? ? //C是面對(duì)過(guò)程的

? ? 3、支持運(yùn)算符重載、函數(shù)重載的編譯時(shí)多態(tài)機(jī)制 //抽象(封裝) 繼承 多態(tài)

? ? 4、泛型編程、模版編程

? ? 5、支持異常處理

? ? 6、類(lèi)型檢查更加嚴(yán)格

? ? 7、C++增加了名字空間的機(jī)制

二、第一個(gè)C++程序

?

#include <iostream>
using namespace std;int main(int argc,const char* argv[])
{cout << "Hello World!" << endl;return 0;
}

? ? 1、文件擴(kuò)展名由 .c 變成 .cpp ?.cc ?.C ?.cxx

? ? 2、編譯器由gcc變成g++,gcc也可以繼續(xù)使用,需要增加編譯參數(shù)

? ? ? ? -xC++ -lstdc++

? ? 3、C++語(yǔ)言的標(biāo)準(zhǔn)頭文件不帶.h,iostream意為in out stream,在C++中輸入、輸出被封裝成了流操作(數(shù)據(jù)流),C語(yǔ)言的頭文件還可以繼續(xù)使用,但是標(biāo)準(zhǔn)C的頭文件建議名字換成前面加c 后綴去掉的新名字 例如 cstdio,為了刪除原C標(biāo)準(zhǔn)頭文件中的大量的宏,重新放入名字空間中,防止命名沖突

? ? 4、C++輸入、輸出

? ? ? ? cout ? ?用于輸出

? ? ? ? cin ? ? 用于輸入

? ? ? ? 不需要占位符,會(huì)自動(dòng)識(shí)別數(shù)據(jù)類(lèi)型

? ? ? ? printf/scanf 屬于C標(biāo)準(zhǔn)庫(kù)中的函數(shù)

? ? ? ? cout/cin 是C++標(biāo)準(zhǔn)庫(kù)中的類(lèi)對(duì)象 ?//不是函數(shù)

? ? 5、增加了名字空間機(jī)制,是C++為了解決命名沖突而發(fā)明的一項(xiàng)機(jī)制

三、C++與C數(shù)據(jù)類(lèi)型的不同

? ? 1、結(jié)構(gòu)的不同

? ? ? ? a、不再需要通過(guò)typedef來(lái)縮短結(jié)構(gòu)類(lèi)型名,在C++中設(shè)計(jì)好結(jié)構(gòu)后,定義結(jié)構(gòu)類(lèi)型時(shí)不再需要使用struct關(guān)鍵字了

? ? ? ? b、結(jié)構(gòu)中可以有成員是成員函數(shù)、成員變量,結(jié)構(gòu)變量、結(jié)構(gòu)指針使用 . 和 -> 訪問(wèn)成員,如果是成員函數(shù),那么可以直接訪問(wèn)同結(jié)構(gòu)中的任何成員,不需要.和->

? ? ? ? c、結(jié)構(gòu)中有一些隱藏的成員函數(shù):構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造、賦值操作

? ? ? ? d、結(jié)構(gòu)可以繼承其它結(jié)構(gòu),也可以被其他結(jié)構(gòu)所繼承

? ? ? ? e、可以給成員賦予訪問(wèn)控制屬性

? ? ? ? ? ? public ? ? ? ?公開(kāi)的(默認(rèn))

? ? ? ? ? ? protected ? ? 保護(hù)的 ?結(jié)構(gòu)內(nèi)和繼承了它的結(jié)構(gòu)中能使用

? ? ? ? ? ? private ? ? ? 私有的 ?只有結(jié)構(gòu)中才能使用

? ?

? ? 2、聯(lián)合的不同

? ? ? ? a、不再需要通過(guò)typedef來(lái)縮短聯(lián)合類(lèi)型名,在C++中設(shè)計(jì)好聯(lián)合后,定義聯(lián)合類(lèi)型時(shí)不再需要使用union關(guān)鍵字了

? ? ? ? b、聯(lián)合中可以有成員是成員函數(shù)、成員變量,聯(lián)合變量、聯(lián)合指針使用 . 和 -> 訪問(wèn)成員,如果是成員函數(shù),那么可以直接訪問(wèn)同聯(lián)合中的任何成員,不需要.和->

? ? ? ? c、聯(lián)合中有一些隱藏的成員函數(shù):構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造、賦值操作

? ? ? ? d、可以給成員賦予訪問(wèn)控制屬性

? ? ? ? ? ? public ? ? ? ?公開(kāi)的(默認(rèn))

? ? ? ? ? ? protected ? ? 保護(hù)的 ?聯(lián)合內(nèi)和繼承了它的聯(lián)合中能使用

? ? ? ? ? ? private ? ? ? 私有的 ?只有聯(lián)合中才能使用

? ?

? ? 3、枚舉的不同

? ? ? ? a、不再需要通過(guò)typedef來(lái)縮短枚舉類(lèi)型名,在C++中設(shè)計(jì)好枚舉后,定義枚舉類(lèi)型時(shí)不再需要使用enum關(guān)鍵字了

? ? ? ? b、C++編譯器會(huì)對(duì)枚舉的值進(jìn)行檢查,如果不符合就報(bào)錯(cuò),只能給名字

? ? ? ? c、C語(yǔ)言使用整型來(lái)模擬的,C++中的枚舉類(lèi)型是一種真正的數(shù)據(jù)類(lèi)型,所以不能與整型進(jìn)行隱式類(lèi)型轉(zhuǎn)換了

? ?

? ? 4、布爾類(lèi)型的不同

? ? ? ? a、C++中有真正的布爾類(lèi)型,bool、true、false 是C++的關(guān)鍵字,不再需要包含 stdbool.h 頭文件

? ? ? ? b、true、false 在C++中是1字節(jié),而C語(yǔ)言是4字節(jié)(int) ? //bool不是C語(yǔ)言的關(guān)鍵字 所以寫(xiě)c需要導(dǎo)入頭文件

? ? ? ? 注意:無(wú)論C還是C++,bool類(lèi)型變量只能存儲(chǔ)0|1

? ?

? ? 5、字符串的不同

? ? ? ? a、C++中的字符串被封裝成了 string 類(lèi),可以與C語(yǔ)言的字符串進(jìn)行轉(zhuǎn)換

? ? ? ? b、string類(lèi)被封裝在 string 文件,并屬于std名字空間,但是string已經(jīng)被iostream包含

? ? ? ? c、使用string類(lèi),可以通過(guò)運(yùn)算符的方式直接操作字符串,但是C語(yǔ)言string.h中的str系列函數(shù)也可以繼續(xù)使用

? ? ? ? ? ? = ? strcpy

? ? ? ? ? ? += ?strcat

? ? ? ? ? ? == ?strcmp ?相同為真

? ? ? ? ? ? size() \ length() ?strlen 只算字符個(gè)數(shù)

? ? ? ? d、C++中沒(méi)有規(guī)定string類(lèi)必須以'\0'結(jié)尾,編譯器在實(shí)現(xiàn)時(shí)可以在結(jié)尾加上'\0'也可以不加,由編譯器決定,因?yàn)閟tring是一個(gè)類(lèi),它的長(zhǎng)度信息已經(jīng)被封裝記錄在私有成員變量中了

? ?

? ? 6、void*的不同?

? ? ? ? 在C語(yǔ)言中,void*類(lèi)型可以與任意類(lèi)型的指針進(jìn)行自動(dòng)轉(zhuǎn)換

? ? ? ? 在C++中,void*類(lèi)型不可以自動(dòng)轉(zhuǎn)換成其他任意類(lèi)型的指針,如果需要把void*類(lèi)型的指針賦值給其他類(lèi)型的指針時(shí),必須通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換后才能賦值,為了提高指針數(shù)據(jù)類(lèi)型的安全性

? ? ? ? 但是其他類(lèi)型的指針還是可以自動(dòng)轉(zhuǎn)換成void*類(lèi)型的指針,因?yàn)镃語(yǔ)言標(biāo)準(zhǔn)庫(kù)、系統(tǒng)函數(shù)中采用了大量的void*類(lèi)型作為參數(shù),如果不保留這個(gè)方式會(huì)導(dǎo)致C++在調(diào)用這些函數(shù)時(shí)非常麻煩

? ? ? ? ? ? int* p = (int*)malloc(4);

? ?

四、名字空間

? ? 1、為什么需要名字空間

? ? ? ? 由于C++完全兼容C語(yǔ)言,C++標(biāo)準(zhǔn)庫(kù)中自帶大量的類(lèi)、函數(shù)、宏,而且支持繼承語(yǔ)法,導(dǎo)致全局的標(biāo)識(shí)符大量增加,因此命名沖突的概率極大的增加,因此名字空間就是為了解決命名沖突

? ? 2、什么是名字空間

? ? ? ? 是C++中一種對(duì)命名空間進(jìn)行邏輯劃分的一種技術(shù)?

? ? ? ? namespace xxx

? ? ? ? {

? ? ? ? ? ? 變量;

? ? ? ? ? ? 函數(shù);

? ? ? ? ? ? 結(jié)構(gòu)、聯(lián)合、枚舉;

? ? ? ? ? ? 類(lèi);

? ? ? ? ? ? ...

? ? ? ? }??

? ? ? ? 定義了名字空間后形成了一個(gè)相對(duì)封閉的作用域空間

? ? 3、如何使用

? ? ? ? 1、直接導(dǎo)入

? ? ? ? ? ? using namespace xxx;

? ? ? ? ? ? 之后就可以直接使用名字空間中的所有內(nèi)容,雖然方便,實(shí)際工作中不建議

? ? ? ? 2、域限定符 ::

? ? ? ? ? ? xxx::標(biāo)識(shí)符

? ? 4、名字空間可合并

? ? ? ? 名字空間可以被多次定義,不同位置的名字空間編譯器會(huì)在編譯時(shí)自動(dòng)合并

? ? ? ? a.cpp

? ? ? ? namespace n1{int a;}

? ? ? ? b.cpp

? ? ? ? namespace n1{int b;}

? ? ? ? main.cpp

? ? ? ? using namespace n1;// ?會(huì)把a(bǔ)、b都導(dǎo)入進(jìn)來(lái)

? ? 5、名字空間中的聲明和定義可以分開(kāi)

? ? ? ? a.h

? ? ? ? namespace n1{

? ? ? ? ? ? extern int num;

? ? ? ? }

? ? ? ? a.cpp

? ? ? ? int n1::num;

? ? ? ? 注意:可以分開(kāi)定義,但是必須加上 名字空間名::變量名

? ? 6、匿名名字空間

? ? ? ? 所有全局標(biāo)識(shí)符都?xì)w屬于同一個(gè)名字空間,稱為匿名名字空間,可以通過(guò) ::全局標(biāo)識(shí)符 來(lái)指定訪問(wèn)匿名名字空間中的內(nèi)容

? ? ? ? 例如:同名的全局變量被同名局部變量屏蔽后,可以以此指定訪問(wèn)全局變量

? ? 7、名字空間可以嵌套

? ? ? ?

 namespace n1{int num = 10;namespace n2{int num = 20;namespace n3{int num = 30; ?}} ?}

? ? ? ? 采用逐層分解訪問(wèn)

? ? ? ? n1::n2::n3::num

? ? ? ? 導(dǎo)入指定層的名字空間

? ? ? ? using namespace n1::n2;

? ? 8、可以給名字空間的名字取別名

? ? ? ? namespace n123 = n1::n2::n3

五、C++的堆內(nèi)存管理

? ? 1、語(yǔ)法格式:

? ? ? ? 類(lèi)型* p = new 類(lèi)型名;

? ? ? ? ? ? new 分配內(nèi)存,相當(dāng)于C語(yǔ)言的malloc ?

? ? ? ? delete p; ?

? ? ? ? ? ? delete 釋放內(nèi)存 相當(dāng)于C語(yǔ)言的free(p)

? ? 2、new 允許在分配內(nèi)存時(shí)直接初始化內(nèi)存

? ? ? ? 類(lèi)型* p = new 類(lèi)型名(val);

? ? ? ? int* p = new int(10);

? ?

? ? 3、new/delete 不能與 malloc/free 混合使用

? ? ? ? int* p = new int;

? ? ? ? free(p);

? ? ? ? 雖然語(yǔ)法允許,但是不能這樣混合使用

? ? ? ? 因?yàn)槭褂胣ew分配內(nèi)存時(shí),會(huì)自動(dòng)調(diào)用結(jié)構(gòu)、聯(lián)合、類(lèi)類(lèi)型的構(gòu)造函數(shù),使用delete釋放內(nèi)存時(shí),會(huì)自動(dòng)調(diào)用結(jié)構(gòu)、聯(lián)合、類(lèi)類(lèi)型的析構(gòu)函數(shù)

? ? ? ? 但是malloc和free都不會(huì)調(diào)用,如果混用,就會(huì)導(dǎo)致構(gòu)造、析構(gòu)沒(méi)有對(duì)應(yīng)調(diào)用

? ? 4、連續(xù)內(nèi)存的申請(qǐng)和釋放

? ? ? ? 類(lèi)型* p = new 類(lèi)型名[個(gè)數(shù)];

? ? ? ? ? ? int* p = new int[10];//10個(gè)int類(lèi)型的連續(xù)堆內(nèi)存40字節(jié)

? ? ? ? ? ? new[] 會(huì)多次調(diào)用構(gòu)造函數(shù)

? ? ? ? delete[] p;

? ? ? ? ? ? delete[]專(zhuān)門(mén)用于釋放通過(guò) new[] 申請(qǐng)出來(lái)的內(nèi)存

? ? ? ? ? ? delete[]也會(huì)多次調(diào)用析構(gòu)函數(shù)

? ? ? ? 注意:malloc/free ?new/delete ?new[]/delete[] 都不能混用

? ? ? ? 注意:通過(guò)new[]為結(jié)構(gòu)、聯(lián)合、類(lèi)類(lèi)型申請(qǐng)的內(nèi)存的前4字節(jié)[-1]中記錄了申請(qǐng)的次數(shù),這樣就可以讓編譯器知道需要調(diào)用多少次構(gòu)造函數(shù)和析構(gòu)函數(shù)

? ? 5、重復(fù)釋放問(wèn)題

? ? ? ? delete可以釋放空指針,但是也不能重復(fù)釋放其他有效地址,與free一致

? ? 6、內(nèi)存分配失敗?

? ? ? ? malloc分配內(nèi)存失敗會(huì)返回NULL

? ? ? ? new分配內(nèi)存失敗會(huì)拋出一個(gè)異常std::bad_array_new_length,如果不接異常并處理,那么會(huì)終止

? ? 7、返回值類(lèi)型不同

? ? ? ? malloc返回一個(gè)void*類(lèi)型的指針

? ? ? ? new返回一個(gè)對(duì)應(yīng)類(lèi)型的指針

? ? ? ? ? ? ? ? ? ? malloc/free ? 和 ? new/delete 的區(qū)別?

? ? 身份(本質(zhì)): ?????????函數(shù) ? ? ? ? ? ? ? ? ????????????????關(guān)鍵字/運(yùn)算符

? ? 返回值:? ? ? ? ? ? ? ? void* ? ? ? ? ? ? ? ?????????????????對(duì)應(yīng)類(lèi)型的指針

? ? 參數(shù):? ? ? ? ? ? ? ? ? ?字節(jié)個(gè)數(shù)(手動(dòng)計(jì)算)? ? ? ? ? 類(lèi)型(自動(dòng)計(jì)算字節(jié)個(gè)數(shù))

? ? 連續(xù)內(nèi)存:? ? ? ? ? ? 手動(dòng)計(jì)算總字節(jié)數(shù)? ? ? ? ? ? new[個(gè)數(shù)]

? ? 擴(kuò)容: ? ? ? ????????? ? ?realloc ? ? ? ? ? ? ?????????????????無(wú)法直接處理

? ? 失敗:? ? ? ? ? ? ? ? ? ? 返回NULL? ? ? ? ? ? ? ? ? ? ? ? 拋異常

? ? 構(gòu)造\析構(gòu):? ? ???????不調(diào)用 ? ? ? ? ? ? ? ???????????????調(diào)用

? ? 初始化:? ? ? ? ? ? ? ?不能初始化 ? ? ? ? ?????????? ? ? 可以初始化

? ? 頭文件: ? ? ????????? ?stdlib.h ? ? ? ? ? ? ????????????????不需要

? ? 函數(shù)重載: ? ?????????不允許重載 ? ? ? ?????????? ? ? ? 允許

? ? 內(nèi)存分配的位置:? 堆內(nèi)存 ? ? ? ? ? ? ?????????????????自由存儲(chǔ)區(qū)

? ? ? ? 注意:自由存儲(chǔ)區(qū)是一個(gè)抽象的概念,而不是具體某個(gè)位置段,平時(shí)一般稱new是分配在堆內(nèi)存也問(wèn)題不大,因?yàn)閚ew底層默認(rèn)調(diào)用了malloc,所以此時(shí)稱分配在堆內(nèi)存沒(méi)問(wèn)題,但是new可以像運(yùn)算符一樣被程序員重載或借助 new(地址) 類(lèi)型 兩種方式分配內(nèi)存時(shí),可以分配到其他內(nèi)存段,所以稱為自由存儲(chǔ)區(qū)

http://aloenet.com.cn/news/46057.html

相關(guān)文章:

  • 哈爾濱網(wǎng)站建設(shè)外包公司申請(qǐng)自媒體平臺(tái)注冊(cè)
  • 網(wǎng)站建設(shè)銷(xiāo)售問(wèn)答品牌營(yíng)銷(xiāo)是什么
  • ps 怎么做網(wǎng)站杭州網(wǎng)站定制
  • win7 iis創(chuàng)建網(wǎng)站網(wǎng)絡(luò)推廣營(yíng)銷(xiāo)網(wǎng)
  • 重慶網(wǎng)站建設(shè)吧營(yíng)銷(xiāo)型網(wǎng)站
  • 自己制作的網(wǎng)站怎么做分頁(yè)今日時(shí)事新聞
  • 寧波網(wǎng)站建設(shè)的企業(yè)太原今日頭條
  • 百度推廣做網(wǎng)站什么價(jià)位網(wǎng)站開(kāi)發(fā)流程的8個(gè)步驟
  • asp網(wǎng)站vps搬家2024年重大新聞簡(jiǎn)短
  • 武漢做網(wǎng)站找哪家好世界球隊(duì)最新排名榜
  • 杭州未來(lái)科技網(wǎng)站建設(shè)高端建站
  • 企業(yè)信用網(wǎng)查詢網(wǎng)站優(yōu)化推廣培訓(xùn)
  • 建甌網(wǎng)站制作百度網(wǎng)站怎么提升排名
  • 自己做產(chǎn)品品牌網(wǎng)站谷歌官網(wǎng)網(wǎng)址
  • 杭州富陽(yáng)區(qū)網(wǎng)站建設(shè)公司seo排名軟件有用嗎
  • 鄭州響應(yīng)式網(wǎng)站建設(shè)如何找外包的銷(xiāo)售團(tuán)隊(duì)
  • 網(wǎng)絡(luò)工作室頭像seo積分優(yōu)化
  • 用flash做的網(wǎng)站展示品牌策劃方案模板
  • 網(wǎng)站二級(jí)域名 權(quán)重 盧松松學(xué)seo網(wǎng)絡(luò)推廣
  • 國(guó)內(nèi)醫(yī)療美容網(wǎng)站建設(shè)培訓(xùn)機(jī)構(gòu)不退費(fèi)最有效方式
  • 電子書(shū)推送網(wǎng)站怎么做會(huì)計(jì)培訓(xùn)班
  • 政府采購(gòu)網(wǎng)站的建設(shè)情況bing收錄提交
  • 個(gè)人博客網(wǎng)站開(kāi)發(fā)的原因鄭州seo排名優(yōu)化公司
  • flash 做ppt的模板下載網(wǎng)站北京seo招聘信息
  • wordpress 命令插件東莞seo靠譜
  • wap網(wǎng)站開(kāi)發(fā)協(xié)議個(gè)人推廣網(wǎng)站
  • 做網(wǎng)站最主要是什么最新的新聞 最新消息
  • java網(wǎng)站開(kāi)發(fā)步驟搜索引擎費(fèi)用
  • html做電子書(shū)網(wǎng)站抖音關(guān)鍵詞搜索排名
  • 網(wǎng)站速度優(yōu)化工具關(guān)鍵詞排名