




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、信息科學(xué)技術(shù)學(xué)院程序設(shè)計(jì)實(shí)習(xí)郭煒劉家瑛1信息科學(xué)技術(shù)學(xué)院程序設(shè)計(jì)實(shí)習(xí)郭煒劉家瑛C+11特性2統(tǒng)一的初始化方法int arr31, 2, 3;vector<int> iv1, 2, 3;map<int, string> mp1, "a", 2, "b"string str"Hello World"int * p = new int201,2,3;struct A int i,j; A(int m,int n):i(m),j(n) ;A func(int m,int n ) return m,n; int main
2、() A * pa = new A 3,7; 3成員變量默認(rèn)初始值class Bpublic:int m = 1234; int n;int main()B b;cout << b.m << endl;return 0;/輸出 12344auto關(guān)鍵字用于定義變量,編譯器可以自動(dòng)變量的類(lèi)型auto i = 100;/ i 是 intauto p = new A(); / p 是 A *auto k = 34343LL;/ k 是 long longmap<string,int,greater<string> > mp;for( auto i =
3、mp.begin(); i != mp.end(); +i) cout << i->first << "," << i->second ;/i的類(lèi)型是: map<string,int,greater<string> >:iterator5auto關(guān)鍵字class A ;A operator + ( int n,const A & a)return a;template <class T1, class T2>auto add(T1 x, T2 y) -> decltype(x
4、+ y) return x+y;auto d = add(100,1.5); / d是double d=101.5auto k = add(100,A(); / d是A類(lèi)型6decltype 關(guān)鍵字求表達(dá)式的類(lèi)型int i; double t;struct A double x; ; const A* a = new A();decltype(a) decltype(i)x1; / x1 is A * x2; / x2 is intdecltype(a->x)x3; / x3 is doubledecltype(a->x) x4 = t; / x4 is double&7智
5、能指針shared_ptrØØ頭文件: <memory>通過(guò)shared_ptr的構(gòu)造函數(shù),可以讓shared_ptr對(duì)象托管一個(gè)new運(yùn)算符返回的指針,寫(xiě)法如下:Øshared_ptr<T> ptr(new T);/ T 可以是 int ,char, 類(lèi)名等各種類(lèi)型此后ptr就可以像 T* 類(lèi)型的指針一樣來(lái)使用,即 *ptr 就是用new動(dòng)態(tài)分配的那個(gè)對(duì)象,而且不必操心內(nèi)存的事。Ø 多個(gè)shared_ptr對(duì)象可以同時(shí)托管一個(gè)指針,系統(tǒng)會(huì)維護(hù)一個(gè)托管計(jì)數(shù)。當(dāng)無(wú)shared_ptr托管該指針時(shí),delete該指針。Ø s
6、hared_ptr對(duì)象不能托管指向動(dòng)態(tài)分配的數(shù)組的指針,否則程序運(yùn)行會(huì)出錯(cuò)8智能指針shared_ptr#include <memory>#include <iostream> using namespace std;struct Aint n;A(int v = 0):n(v) A() cout << n << " destructor" << endl; ;int main()shared_ptr<A> sp1(new A(2); /sp1托管A(2)shared_ptr<A> sp2(
7、sp1);/sp2也托管A(2)cout << "1)" << sp1->n << "," << sp2->n << endl; /輸出1)2,2shared_ptr<A> sp3;A * p = sp1.get();/p 指向 A(2)cout << "2)" << p->n << endl;9輸出結(jié)果:1)2,22)2sp3 = sp1; /sp3也托管A(2)cout << "3)&
8、quot; << (*sp3).n << endl; /輸出 2sp1.reset();if( !sp1 )/sp1放棄托管A(2)cout << "4)sp1 is null" << endl; /會(huì)輸出A * q = new A(3); sp1.reset(q); / sp1托管qcout << "5)" << sp1->n << endl; /輸出 3shared_ptr<A> sp4(sp1); /sp4托管A(3) shared_ptr<
9、A> sp5;/sp5.reset(q); 不妥,會(huì)導(dǎo)致程序出錯(cuò)sp1.reset();/sp1放棄托管A(3)cout << "before end main" <<endl;sp4.reset();/sp1放棄托管A(3)cout << "end main" << endl;return 0; /程序結(jié)束,會(huì)delete 掉A(2)10輸出結(jié)果:1)2,22)23)24)sp1 is null5)3before end main 3 destructorend main2 destructor空指
10、針nullptr#include <memory>#include <iostream>using namespace std;int main()int* p1 = NULL; int* p2 = nullptr;shared_ptr<double> p3 = nullptr; if(p1 = p2)cout << "equal 1" <<endl; if( p3 = nullptr)cout << "equal 2" <<endl; if( p3 = p2) ; /
11、errorif( p3 = NULL)cout << "equal 4" <<endl;bool b = nullptr; / b = falseint i = nullptr; /error,nullptr不能自動(dòng)轉(zhuǎn)換成整型return 0;11去掉出錯(cuò)的語(yǔ)句后輸出:equal 1equal 2equal 4基于范圍的for循環(huán)#include <iostream>#include <vector> using namespace std;struct A int n; int main() A(int i):n(i) ;i
12、nt ary = 1,2,3,4,5;for(int & e: ary)e*= 10; for(int e : ary)cout << e << "," cout << endl;vector<A> st(ary,ary+5);for( auto & it: st)it.n *= 10; for( A it: st)cout << it.n << ","return 0;12輸出:10,20,30,40,50,100,200,300,400,500,和move語(yǔ)義右值
13、右值:一般來(lái)說(shuō),不能取地址的表達(dá)式,就是右值, 能取地址的,就是左值class A ;A & r = A(); / error , A()是無(wú)名變量,是右值A(chǔ) && r = A(); /ok, r 是右值主要目的是提高程序運(yùn)行的效率,減少需要進(jìn)行深拷貝的對(duì)象進(jìn)行深拷貝的次數(shù)。參考A7%A3c%E5%8F%B3%E5%80%BC%E5%BC%95%E7%94%A8/13#include <iostream> #include <string> #include <cstring> using namespace std;class St
14、ringpublic:char * str;String():str(new char1) str0 = 0; String(const char * s) str = new charstrlen(s)+1;strcpy(str,s);String(const String & s) cout << "copy constructor called" << endl; str = new charstrlen(s.str)+1; strcpy(str,s.str);14String & operator=(const String
15、& s) cout << "copy operator= called" << endl; if( str != s.str) delete str;str = new charstrlen(s.str)+1; strcpy(str,s.str);return * this;/ move constructor String(String && s):str(s.str) cout << "move constructor called"<<endl;s.str = new char
16、1; s.str0 = 0;15/ move assigmentString & operator = (String &&s) cout << "move operator= called"<<endl; if (str!= s.str) str = s.str;s.str = new char1;s.str0 = 0;return *this;String() delete str; ;template <class T>void MoveSwap(T& a, T& b)T tmp(move(a
17、); / std:move(a)為右值,這里會(huì)調(diào)用move constructora = move(b);/ move(b)為右值,因此這里會(huì)調(diào)用move assigmentb = move(tmp); / move(tmp)為右值,因此這里會(huì)調(diào)用move assigment16int main()/String & r = String("this"); / errorString && r = String("this");cout << r.str << endl;String s1 = "
18、hello",s2 = "world" MoveSwap(s1,s2);cout << s2.str << endl; return 0;17輸出:thismove constructor called move operator= called move operator= called helloIn-Quiz1. 下面的變量x是什么類(lèi)型的(假設(shè)頭文件都已經(jīng)包含)?template <class T1, class T2>auto add(T1 x, T2 y) -> decltype(x + y) return x+
19、y;int main()auto x = add( string("hello"),"world");return 0;A)char * B)string C)int D)拜托,上面程序有語(yǔ)法錯(cuò)誤好不好2. struct A int n; ; shared_ptr<A> p(new A();則以下哪個(gè)表達(dá)式是沒(méi)有定義的?A)! p B)p->n; C)*p D)+p;3. 以下哪段程序沒(méi)有編譯錯(cuò)誤?A) string & r = string("this");B) string && r = string("this");C) string s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CNCA 018-2022基于動(dòng)態(tài)地質(zhì)模型與自主規(guī)劃開(kāi)采的綜采工作面驗(yàn)收規(guī)范
- T/CMA HG021-2020輪胎試驗(yàn)路面構(gòu)造深度測(cè)量方法手工鋪砂法
- T/CIES 030-2020中小學(xué)教室健康照明設(shè)計(jì)規(guī)范
- T/CIE 165-2023企業(yè)級(jí)固態(tài)硬盤(pán)測(cè)試規(guī)范第1部分:功能測(cè)試
- T/CI 294-2024重大固定資產(chǎn)投資項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)估分析篇章和評(píng)估報(bào)告編寫(xiě)規(guī)范
- 【正版授權(quán)】 ISO 834-1:2025 EN Fire-resistance tests - Elements of building construction - Part 1: General requirements
- T/CGCC 33.2-2019預(yù)包裝冷藏膳食第2部分:含生鮮類(lèi)
- T/CECS 10299-2023環(huán)保用微生物菌劑的菌種鑒定規(guī)則
- T/CCS 069-2023智能化煤礦無(wú)軌膠輪車(chē)輔助運(yùn)輸系統(tǒng)運(yùn)維管理規(guī)范
- T/CCMA 0178-2024交通錐收集工程車(chē)
- 《硬科技早期投資-項(xiàng)目評(píng)估指南》
- 2025年貴州遵義路橋工程限公司招聘10人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 上海市居住房屋租賃合同范本
- 廣西河池市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)部編版小升初模擬(下學(xué)期)試卷及答案
- 保潔及會(huì)務(wù)服務(wù)項(xiàng)目技術(shù)方案
- 實(shí)驗(yàn)探究題(原卷版)-2024-2025學(xué)年初中化學(xué)九年級(jí)上冊(cè)專(zhuān)項(xiàng)復(fù)習(xí)(湖南專(zhuān)用)
- 成語(yǔ)故事《刻舟求劍》課件2
- 新高考2025屆高考數(shù)學(xué)二輪復(fù)習(xí)專(zhuān)題突破精練第9講函數(shù)中的整數(shù)問(wèn)題與零點(diǎn)相同問(wèn)題學(xué)生版
- 新版建設(shè)工程工程量清單計(jì)價(jià)標(biāo)準(zhǔn)解讀
- 1、大客戶(hù)部組織結(jié)構(gòu)、部門(mén)職責(zé)
- 低年級(jí)繪本閱讀校本課程開(kāi)發(fā)與實(shí)施方案
評(píng)論
0/150
提交評(píng)論