![程序設(shè)計實習(xí)w1011特性_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/fcf93690-75fd-4c21-9927-fc46f39c4c8a/fcf93690-75fd-4c21-9927-fc46f39c4c8a1.gif)
![程序設(shè)計實習(xí)w1011特性_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/fcf93690-75fd-4c21-9927-fc46f39c4c8a/fcf93690-75fd-4c21-9927-fc46f39c4c8a2.gif)
![程序設(shè)計實習(xí)w1011特性_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/fcf93690-75fd-4c21-9927-fc46f39c4c8a/fcf93690-75fd-4c21-9927-fc46f39c4c8a3.gif)
![程序設(shè)計實習(xí)w1011特性_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/fcf93690-75fd-4c21-9927-fc46f39c4c8a/fcf93690-75fd-4c21-9927-fc46f39c4c8a4.gif)
![程序設(shè)計實習(xí)w1011特性_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/13/fcf93690-75fd-4c21-9927-fc46f39c4c8a/fcf93690-75fd-4c21-9927-fc46f39c4c8a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、信息科學(xué)技術(shù)學(xué)院程序設(shè)計實習(xí)郭煒劉家瑛1信息科學(xué)技術(shù)學(xué)院程序設(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)鍵字用于定義變量,編譯器可以自動變量的類型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的類型是: 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類型6decltype 關(guān)鍵字求表達(dá)式的類型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>通過shared_ptr的構(gòu)造函數(shù),可以讓shared_ptr對象托管一個new運算符返回的指針,寫法如下:Øshared_ptr<T> ptr(new T);/ T 可以是 int ,char, 類名等各種類型此后ptr就可以像 T* 類型的指針一樣來使用,即 *ptr 就是用new動態(tài)分配的那個對象,而且不必操心內(nèi)存的事。Ø 多個shared_ptr對象可以同時托管一個指針,系統(tǒng)會維護(hù)一個托管計數(shù)。當(dāng)無shared_ptr托管該指針時,delete該指針。Ø s
6、hared_ptr對象不能托管指向動態(tài)分配的數(shù)組的指針,否則程序運行會出錯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; /會輸出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); 不妥,會導(dǎo)致程序出錯sp1.reset();/sp1放棄托管A(3)cout << "before end main" <<endl;sp4.reset();/sp1放棄托管A(3)cout << "end main" << endl;return 0; /程序結(jié)束,會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不能自動轉(zhuǎn)換成整型return 0;11去掉出錯的語句后輸出: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語義右值
13、右值:一般來說,不能取地址的表達(dá)式,就是右值, 能取地址的,就是左值class A ;A & r = A(); / error , A()是無名變量,是右值A(chǔ) && r = A(); /ok, r 是右值主要目的是提高程序運行的效率,減少需要進(jìn)行深拷貝的對象進(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)為右值,這里會調(diào)用move constructora = move(b);/ move(b)為右值,因此這里會調(diào)用move assigmentb = move(tmp); / move(tmp)為右值,因此這里會調(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是什么類型的(假設(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)拜托,上面程序有語法錯誤好不好2. struct A int n; ; shared_ptr<A> p(new A();則以下哪個表達(dá)式是沒有定義的?A)! p B)p->n; C)*p D)+p;3. 以下哪段程序沒有編譯錯誤?A) string & r = string("this");B) string && r = string("this");C) string s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部審人教版七年級數(shù)學(xué)下冊聽評課記錄《5.2.1 平行線》2
- 人教版地理七年級上冊第二節(jié)《地球的運動》聽課評課記錄3
- 湘教版數(shù)學(xué)八年級上冊4.1《不等式》聽評課記錄
- 人教版地理八年級下冊7.2《魚米之鄉(xiāng)-長江三角洲地區(qū)》聽課評課記錄2
- 用戶體驗設(shè)計服務(wù)協(xié)議書(2篇)
- 環(huán)境整治用功協(xié)議書(2篇)
- 人教部編版八年級道德與法治上冊:8.1《國家好 大家才會好-國家利益的含義》聽課評課記錄
- 【人教版】河南省八年級地理上冊3.2土地資源聽課評課記錄1新版新人教版
- 新版華東師大版八年級數(shù)學(xué)下冊《17.3.2一次函數(shù)的圖象2》聽評課記錄22
- 北京課改版歷史八年級上冊第3課《第二次鴉片戰(zhàn)爭》聽課評課記錄
- 2025年個人土地承包合同樣本(2篇)
- 2024-2025學(xué)年教科版八年級物理下冊 第12章 機(jī)械能 綜合素質(zhì)評價卷(含答案)
- 網(wǎng)絡(luò)貨運行業(yè)研究報告
- 【人教版化學(xué)】選擇性必修1 知識點默寫小紙條(答案背誦版)
- 人教版七年級英語上冊單元重難點易錯題Unit 2 單元話題完形填空練習(xí)(含答案)
- 00015-英語二自學(xué)教程-unit1
- 新版建設(shè)工程工程量清單計價標(biāo)準(zhǔn)解讀
- 云南省昆明市盤龍區(qū)2023-2024學(xué)年三年級上學(xué)期語文期末試卷
- 2024-2025年突發(fā)緊急事故(急救護(hù)理學(xué))基礎(chǔ)知識考試題庫與答案
- 左心耳封堵術(shù)護(hù)理
- 2024年部編版八年級語文上冊電子課本(高清版)
評論
0/150
提交評論