C語言程序設計課件1第4章 C++程序的結構_第1頁
C語言程序設計課件1第4章 C++程序的結構_第2頁
C語言程序設計課件1第4章 C++程序的結構_第3頁
C語言程序設計課件1第4章 C++程序的結構_第4頁
C語言程序設計課件1第4章 C++程序的結構_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章

C++程序的結構

1.區(qū)分各種變量的類型以及在內存中的存放2.理解局部靜態(tài)變量的雙重特征3.區(qū)分各種類型標識符以及其作用域與可見性4.掌握預處理命令的常用用途5.理解名字空間的概念與使用方法學習目標

4.1變量的類型

intg=100000;intsum(intx,inty){intsum=0;for(inti=x;i<=y;i++)sum=sum+i;returnsum;}intmain(){intx=1,y=100;cout<<sum(x,y)+g<<endl;return0;}1234567891011121314g為全局變量sum()中

x、y為局部變量main()中的

x、y為局部變量

除了按數(shù)據(jù)類型區(qū)分變量外,根據(jù)變量定義的位置,可以把變量分成全局變量(globalvariable)與局部變量(localvariable)。全局變量是指定義在函數(shù)體外部的變量,它能被所有函數(shù)使用。局部變量是指定義在函數(shù)或復合語句中定義的變量,只能在函數(shù)或復合語句中使用。4.1.2變量的存儲類型

C++中變量有auto、extern、register、static四種存儲類型。1.auto說明符

auto說明符說明定義的是一個局部變量。函數(shù)中的局部變量,如果不用關鍵字static加以聲明,編譯系統(tǒng)對它們是動態(tài)分配存儲空間的。局部變量默認存儲類型為auto,所以在程序中很少使用auto說明符說明。

2.register說明符為提高執(zhí)行效率,C++允許將局部變量的值存放在CPU的寄存器中,需要時直接從寄存器中取出參加運算,不必到內存中去存取,這種類型的局部變量稱為寄存器變量,用關鍵字register聲明。在程序中定義寄存器變量對編譯系統(tǒng)只是建議性的,而不是強制性的。3.extern說明符如果一個完整的計算機程序很大,分成多個模塊,放在不同的文件中,分開編譯成目標文件,最后連接成一個完整的可執(zhí)行代碼。對于所有模塊共同使用的全局變量,如果在所有的模塊中都定義,在連接時就會出錯。解決辦法是只在一個模塊中定義全局變量,在其他模塊中用extern說明這是一個“外來”的全局變量。/****************************p4_1_p.cpp**extern型變量的使用****************************/#include<iostream>usingnamespacestd;externvoidp1dispG();externvoidp2dispG();externvoidp2dispg();intG=0,g=0;intmain(){p1dispG();p2dispG();p2dispg();cout<<"inpG="<<G<<endl;cout<<"inpg="<<g<<endl;return0;}12345678910111213141516171819//p4_1_p1.cpp#include<iostream>usingnamespacestd;externintG;voidp1dispG(){ G=11;cout<<"inp1G="<<G<<endl;}123456789//p4_1_p2.cpp#include<iostream>usingnamespacestd;externintG;externintg;voidp2dispG(){G=22;cout<<"inp2G="<<G<<endl;}voidp2dispg(){g=33;cout<<"inp2g="<<g<<endl;}123456789101112131415運行結果:inp1G=11inp2G=22inp2g=33inpG=22inpg=334.1.2變量的存儲類型

4.static說明符

static說明符用于在定義變量時將變量聲明為成static(靜態(tài))變量。其格式為:

static可用來聲明全局靜態(tài)變量和局部靜態(tài)變量。當聲明全局靜態(tài)變量時,全局靜態(tài)變量只能供本模塊使用,不能被其它模塊再聲明為extern變量。例如:將程序p4_1_p.cpp中的全局變量聲明為:

staticintG=0;

那么在其他模塊中就不能聲明為:externintG;//錯誤,G已經是一個static變量;

static數(shù)據(jù)類型變量名=初值;

注意:

當一個局部變量聲明為static變量,它既具有局部變量的性質:只能在函數(shù)體局部存??;又具有全局變量的性質:函數(shù)多次進入,變量的值只初始化一次。因此靜態(tài)局部變量實質是一個供函數(shù)局部存取的全局變量。/***********************************p4_2.cpp**靜態(tài)局部變量的使用***********************************/#include<iostream>usingnamespacestd;voidfun()

{staticintn=0;intm=0;n++;m++;cout<<"m="<<m<<",n="<<n<<endl;}intmain(){for(inti=0;i<4;i++)fun();return0;}

1234567891011121314151617181920

運行結果:m=1n=1m=1n=2m=1n=3m=1n=4

4.1.2變量的存儲類型

靜態(tài)局部變量n只是在函數(shù)fun()第一次進入時初始化0,隨后每次進入不再賦初值

4.1.3變量在內存中的存儲

當一個程序準備運行時,操作系統(tǒng)會為程序分配一塊內存空間,C++程序的內存通常被分為四個區(qū): ①全局數(shù)據(jù)區(qū)(dataarea) ②代碼區(qū)(codearea) ③棧區(qū)(stackarea) ④堆區(qū)(heaparea)

全局變量、靜態(tài)變量、字符串常量和常變量存放在全局數(shù)據(jù)區(qū);所有的函數(shù)和代碼存放在代碼區(qū);為運行函數(shù)而分配的函數(shù)參數(shù)、局部變量和返回地址存放在棧區(qū);動態(tài)分配內存在堆區(qū)。

變量的生存期為從產生到消失的時期。全局變量、靜態(tài)變量、常變量生存周期為整個程序的生存周期,因此稱為靜態(tài)生存期;局部變量的生存周期起于函數(shù)調用,結束于函數(shù)調用結束,其生存期是動態(tài)的,因此稱為動態(tài)生存期。注意:

堆空間不是系統(tǒng)為程序自動分配的,它是程序執(zhí)行過程中由new語句為變量分配的。即使指向堆空間的指針變量消失,new語句分配的空間也不會消失。new語句分配的空間由delete語句釋放。

/***************************************p4_3.cpp**顯示各類變量的內存分配****************************************/#include<iostream>usingnamespacestd;intk=300;constinti=100;#definen10constintj=200;voidfun(inti=1,intj=2){

const

intk=3;

staticintl=0;char*p=newchar[n+1];for(intm=0;m<n;m++)p[m]='A'+m;p[m]='\0';cout<<"Adddressofparametervariable:"<<endl;

12345678910111213141516171819

4.1.3變量在內存中的存儲

常變量(常量)、全局變量、局部靜態(tài)變量、字符串常量在程序運行前在數(shù)據(jù)區(qū)進行分配。并且依次按照常變量、全局變量、局部靜態(tài)變量的順序從低地址向高地址分配。常變量按定義的先后次序分配,全局變量、局部變量也一樣。

cout<<"&i="<<&i<<"\t"<<"&j="<<&j<<endl;cout<<"Adddressoflocalvariable:"<<endl;cout<<"&k="<<&k<<"\t"<<"&p="<<&p<<"\t"<<"&m="<<&m<<endl;cout<<"Adddressofstaticlocalvariable:"<<endl;cout<<"&l="<<&l<<endl;cout<<"Addressofheap:"<<(void*)p<<endl;cout<<"beforedeletep="<<p<<endl;

delete[]p;cout<<"afterdelete:"<<(void*)p<<endl;cout<<"p="<<p<<endl;}intmain(){L1: fun();L2: cout<<"Adddressofglobalvariable:"<<endl; cout<<"&i="<<&i<<"\t"<<"&j="<<&j<<"\t"<<"&k="<<&k<<endl;cout<<"Addressoffunction:"<<endl; cout<<"&fun="<<&fun<<"\t"<<"&main="<<&main<<endl;

return0;}

2021222324252627282930313233343536373940運行結果:Addressofparametervariable:&i=0013FF2C &j=0013FF30Addressoflocalvariable:&k=0013FF20 &p=0013FF1C &m=0013FF18Addressofstaticlocalvariable:&l=0047773CAddressofheap:00480410 //釋放堆空間前指針的值beforedeletep=ABCDEFGHIJ //釋放堆空間前堆中的內容afterdelete:00480410 //釋放堆空間后指針的值不變p=葺葺葺葺葺葺葺?//釋放堆空間后,堆中的內容無意義Addressofglobalvariable:&i=0046C01C &j=0046C020 &k=00474DC0Addressoffunction:&fun=004010A0 &main=0040123F4.1.2變量的存儲類型

4.1.2變量的存儲類型解釋

:當函數(shù)被調用時才為函數(shù)的形參、返回代碼地址、局部變量分配空間。由于空間在棧中,所以從棧底開始依次按形參、返回代碼地址、局部變量的順序從高地址向低地址分配。其中,在分配形參地址時,按從右向左的順序;分配各局部變量的地址時,按定義的先后次序。當函數(shù)調用結束,該函數(shù)占用的??臻g收回。收回的順序(即各變量消失的順序)與分配的順序相反。程序運行時,系統(tǒng)為各個函數(shù)的執(zhí)行代碼在代碼段中分配空間,然后將代碼調入內存。各函數(shù)在代碼區(qū)的排列次序按函數(shù)定義的先后次序。程序運行結束,程序占用的代碼段空間收回。全局常變量、全局變量、局部靜態(tài)變量、字符串常量在程序運行前在全局數(shù)據(jù)區(qū)進行分配。并且依次按照全局常變量、全局變量、局部靜態(tài)變量的順序從低地址向高地址分配,其中各類變量按定義的先后次序分配。當程序運行結束后,各全局變量的空間被系統(tǒng)收回,收回的順序與分配的順序相同,即:先分配先收回。堆空間不是系統(tǒng)為程序自動分配的,它是程序執(zhí)行過程中由new語句為變量分配的。即使指向堆空間的指針變量消失,new語句分配的空間也不會消失。New語句分配的空間由delete語句釋放。變量的生存期為從產生到消失的時期。全局變量、靜態(tài)變量、常變量生存周期為整個程序的生存周期,因此稱為靜態(tài)生存期;局部變量的生存周期起于函數(shù)調用,結束于函數(shù)調用結束,其生存期是動態(tài)的,因此稱為動態(tài)生存期。4.2標識符的作用域與可見性

標識符的作用域是標識符在程序源代碼中的有效范圍,從小到大分為函數(shù)原型作用域、塊作用域(局部作用域),文件作用域(全局作用域)。1.函數(shù)原型作用域函數(shù)原型作用域是C++程序中最小作用域。函數(shù)原型聲明時形式參數(shù)的作用范圍就是函數(shù)原型的作用域。例如:有下列函數(shù)聲明:

fun(inti,intj);

標識符i、j的作用域為函數(shù)原型,即函數(shù)fun形參的兩個括號之間,在其他地方不能引用這些標識符。2.塊作用域所謂的塊就是用{}括起來的一段程序,在塊中定義的標識符,作用域從聲明處開始,一直到塊的大括號為止。其中有下列情況屬于一個塊:

(1)

函數(shù)的形參與函數(shù)體屬于一個塊;

(2)for()語句中,括號()中屬于一個塊;/***************************************p4_4.cpp**標識符作用域****************************************/#include<iostream>usingnamespacestd;inti=100,j=200;voidfun(inti=2){cout<<"L2:i="<<i<<endl;{inti=3;cout<<"L3:i="<<i<<endl;

{for(inti=4;i<5;cout<<"L6:i="<<i<<endl,i++)1234567891011121314154.2標識符的作用域與可見性i=5i=4i=3i=2

{}}{cout<<"L4:i="<<i<<endl;inti=5 i++;cout<<"L5:i="<<i<<endl;}}}}intmain(){fun();return0;}1617181920212223242526272829運行結果:L2:i=2L3:i=3L4:i=4L5:i=6L6:i=44.2標識符的作用域與可見性4.2標識符的作用域與可見性

4.可見性程序運行到某一處,能夠引用到的標識符,稱為該處可見到的標識符??梢娦员硎緩哪程幠芸吹绞裁础?梢娦缘囊话阋?guī)則是:

(1)

內層可以看到外層定義的各種標識符。

(2)

如果內、外層塊定義的標識符同名,實質代表不同的實體,內層只能看到與之最近的標識符,相當于外層標識符被內層同名的標識符隱藏了。

(3)

內層標識符的作用域不能覆蓋(作用)到外層,所以外層看不到內層的標識符。

(4)

同層中,后面語句定義的標識符作用域不能作用到前面語句和塊。因此,前面語句看不到后面語句定義的標識符。

(5)

作用域作用的方向為從外向內、從前向后;可見性的方向則從內向外、從后向前。4.3程序的文件結構與編譯預處理命令

一個高級語言源程序在計算機上運行,必須先用編譯程序將其翻譯為機器語言。在編譯之前還要做某些預處理工作,如去掉注釋,變換格式等。

C++源程序中以#開頭、以換行符結尾的行稱為預處理命令。預處理命令不是C++語言的語法成分,在編譯前由預處理器執(zhí)行,在目標程序中,不含預處理指令對應的機器碼。因此,預處理命令不以分號結尾。

許多預處理命令更適合C程序員,但為了處理C遺留的代碼,C++編程者也應該熟悉預處理命令。

4.3程序的文件結構與編譯預處理命令

4.3.1.文件包括#include命令

文件包含是指在一個C++源程序中通過#include命令將另一個文件(通常是.h、.c或.cpp為后綴的文件)的全部內容包含進來。

文件包含處理命令的一般格式為:

編譯時預編譯器將被包含文件的內容插入到源程序中#include命令的位置,以形成新的源程序。

#include<被包含文件名>或

#include"被包含文件名"/******************************p4_5.cpp**主程序******************************/#include<iostream>usingnamespacestd;#include"mymath.h"intmain(){cout<<max(5,6)<<endl;return0;}1234567891011//********************************mymath.h**一些自定義的數(shù)學函數(shù)*********************************/#include<iostream>usingnamespacestd;intmax(intx,inty){returnx>y?x:y;}12345678910#include<iostream>usingnamespacestd;#include<iostream>usingnamespacestd;intmax(intx,inty){returnx>y?x:y;}intmain(){cout<<max(5,6)<<endl;return0;}123456789101112

對主程序p4_5.cpp編譯時預處理程序執(zhí)行#include"mymath.h",將p4_5.cpp變成:

4.3程序的文件結構與編譯預處理命令

4.3.2.不帶參數(shù)的宏定義

宏定義分為兩種:不帶參數(shù)的宏定義和帶參數(shù)的宏定義。

#define命令定義一個標識符來代表一個字符串(表達式),在源程序中發(fā)現(xiàn)該標識符時,都用該字符串替換,以形成新的源程序。這種標識符稱為宏名(macroname),將程序中出現(xiàn)的與宏名相同的標識符替換為字符串的過程稱為宏替換或宏代換(macrosubstitulition)。不帶參數(shù)的宏定義的一般形式是:

其中:#define是宏定義命令名稱。標識符(宏名)被定義用來代表后面的單詞串。單詞串是宏的內容文本,也稱為宏體,可以是任意以回車換行結尾的文字。單詞串一般不用分號結尾。#define標識符單詞串

源程序#include<iostream>usingnamespacestd;#defineSIZE10#defineNEWLINE"\n"#defineTAB"\t"intmain(){inta[SIZE],i;for(i=0;i<SIZE;i++)cout<<a[i]<<TAB;cout<<NEWLINE;return0;}12345678910111213預編譯處理(宏替換)后的源程序#include<iostream>usingnamespacestd;#defineSIZE10#defineNEWLINE"\n"#defineTAB"\t"intmain(){inta[10],i;for(i=0;i<10;i++)cout<<a[i]<<"\t";cout<<"\n";return0;}12345678910111213注意:

宏替換時僅僅是將源程序中與宏名相同的標識符替換成宏的內容文本,并不對宏的內容文本做任何處理。4.3程序的文件結構與編譯預處理命令

宏定義時,要注意以下幾點:程序員通常用大寫字母來定義宏名,以便與變量名區(qū)別。這種習慣幫助讀者迅速識別發(fā)生宏替換的位置。同時最好把所有宏定義放在文件的最前面或另一個單獨的文件中,不要把宏定義分散在文件的多個位置。宏定義時,如果單詞串太長,需要寫多行,可以在行尾使用反斜線\續(xù)行符。例如:

#defineLONG_STRING"thisisaverylongstringthatis\usedasanexample"雙引號包括在替代的內容之內。宏名的作用域是從#define定義之后直到該宏定義所在文件結束,但通常把#define宏定義放在源程序文件的開頭部分。如果需要終止宏的作用域,可以使用#undef命令,其一般格式為:宏定義可以嵌套定義、被重復定義,但不能遞歸定義。程序中字符串常量即雙引號中的字符,不作為宏進行宏替換操作。在定義宏時,如果宏是一個表達式,那么一定要將這個表達式用()括起來,否則可能會引起非預期的結果。

#undef標識符

4.3程序的文件結構與編譯預處理命令4.3.3.帶參數(shù)的宏定義

#define還有一個重要的功能:定義帶參數(shù)的宏。這樣的宏因為定義成一個函數(shù)調用的形式,也被稱為類函數(shù)宏。在C++中由于可以使用函數(shù)模板,這種用宏定義的函數(shù)模板被取代。

帶參數(shù)的宏定義的一般形式為

參數(shù)表由一個或多個參數(shù)構成,參數(shù)只有參數(shù)名,沒有數(shù)據(jù)類型符,參數(shù)之間用逗號隔開,參數(shù)名必須是合法的標識符。參數(shù)列表類似函數(shù)的形參表。預編譯器首先將實參按參數(shù)列表中參數(shù)對應的順序,取代內容文本中的參數(shù);再將這個宏的實際內容文本替換源程序中的宏標識符:#define標識符(參數(shù)列表)單詞串

源程序#defineMAX(x,y)(((x)>(y))?(x):(y))voidmain(){floata=-2.5,b=-3.2;cout<<MAX(a,b)<<endl;}123456預編譯處理(宏替換)后的新源程序

intmain(){floata=2.5,b=-3.2;cout<<(((a)>(b))?(a):(b))<<endl;return0;}1234567說明:

預編譯器在處理上面源程序中的MAX(a,b)時,首先將MAX(x,y)的宏內容文本中的x替換成a,將y替換成b,形成新的宏內容是:(((a)>(b))?(a):(b)),然后將MAX(a,b)替換成(((a)>(b))?(a):(b))。4.3程序的文件結構與編譯預處理命令4.3.4.條件編譯

一般情況下,源程序中所有的語句都參加編譯,但有時也希望根據(jù)一定的條件去編譯源文件的不同部分,這就是條件編譯。條件編譯使得同一源程序在不同的編譯條件下得到不同的目標代碼。條件編譯有幾種常用的形式,現(xiàn)分別介紹如下:

(1)#if~#endif形式

#if~

#endif形式的條件編譯的格式為:

其中:elif是elseif的縮寫,但不可寫成elseif。#elif和#else可以省略,但#endif不能省略,它是#if命令的結尾。#elif命令可以有多個。if后面的條件必須是一個常量表達式,通常會用到宏名,條件可以不加括號()

#if條件1

程序段1#elif條件2

程序段2...#else

程序段n#endif

源程序#defineUSA0#defineCHINA1#defineENGLAND2#defineACTIVE_COUNTRYUSA#ifACTIVE_COUNTRY==USAchar*currency="dollar";

#elifACTIVE_COUNTRY==ENGLANDchar*currency="pound";#elsechar*currency="yuan";#endifintmain(){floatmoney;cin>>money;cout<<money<<currency<<endl;return0;}12345678910111213141516171819預編譯處理后的新源程序

char*currency="dollar";

intmain(){floatmoney;cin>>money;cout<<money<<currency<<endl;return0;}123456789101112131415161718注意:#if和#elif常常與defined命令配合使用4.3程序的文件結構與編譯預處理命令(2)#ifdef~

#endif

#ifdef~#endif形式的條件編譯的格式為:其中:#else可以省略,#endif不能省略,它是#if命令的結尾。在#ifdef和#else之間可以加多個#elif命令?!?ifdef宏名”的含義是判斷是否定義了宏,它等價于“#ifdefined(宏名)”。其作用是:如果宏名已被#define行定義,則編譯程序段1,否則編譯程序段2。

#ifdef宏名

程序段1#else

程序段2#endif4.3程序的文件結構與編譯預處理命令(3)#ifndef~

#endif

#ifndef~#endif形式的條件編譯的格式為:條件編譯呢主要用于下列幾種場合:

(1)

避免重復包含引起變量函數(shù)的重復定義引起的沖突。如果某個程序的頭文件中已定義了某個常量,用條件編譯進行判斷后,就不再重新定義該常量,避免造成不一致;如果在頭文件中如果包含某個模塊,用條件編譯進行判斷后,就可不再重復包含此模塊,避免變量、函數(shù)重名沖突。

#ifndef宏名

程序段1#else

程序段2#endif注意:

與第2種形式的區(qū)別僅在于:如果宏名沒有被#define定義,則編譯程序段1,否則編譯程序段2。

源程序/****************************mymath.h*****************************/#include<iostream>usingnamespacestd;#defineINTMAXintmax(intx,inty){returnx>y?x:y;}/************************主程序************************/#include<iostream>usingnamespacestd;#include"mymath.h"#ifndefINTMAXintmax(intx,inty){returnx>y?x:y;}#endifintmain(){cout<<max(5,6)<<endl;return0;}123456789101112131415161718192021222324252627預編譯處理后的新源程序

#include<iostream>usingnamespacestd;#include<iostream>usingnamespacestd;#defineINTMAXintmax(intx,inty){returnx>y?x:y;}intmain(){cout<<max(5,6)<<endl;return0;}

解釋:主程序中定義的intmax(int,int)在預處理時被過濾掉,沒有進入編譯,避免了與mymath.h中的intmax(int,int)沖突。12345678910111213144.3程序的文件結構與編譯預處理命令

(2)便于程序的移植。如在PC機上,最常用的C++有BC++、VC++、LinuxGNUC++,三者在實現(xiàn)上有一些不同之處,如果我們希望自己的源程序能夠適應這種差異,可以在有差異的地方插入選擇判斷:#ifdefVC++…//visualC++獨有的內容

#endif#ifdefBC++…//BorlandC++獨有的內容

#endif#ifdefGC++…//LinuxGnuC++獨有的內容

#endif

如果希望這個程序在BorlandC++環(huán)境下編譯運行,可在程序的前面寫上:

#defineBC++

這樣一個源程序只要修改一句就可以適應三種C編譯,商業(yè)軟件經常就是這樣編寫的。商業(yè)軟件的版本中經常出現(xiàn)的單機版、網絡版,其實網絡版只是在單機版的基礎上增加了相應的一些網絡功能,功能上大體相同,所以在同一軟件程序中將單機版的功能和網絡版的功能通過條件編譯就可得到相應的版本。4.4名字空間

一個軟件往往由多個模塊(組件)組成,這些模塊由不同程序員(軟件商)提供,不同模塊可能使用了相同的標識符。簡單說就是同一個名字在不同模塊中代表不同的事物。當這些模塊用到同一個程序中,同名標識符就引起沖突。C++提供名字空間(namespace)

將相同的名字放在不同空間中來防止命名沖突。

定義一個名字空間的格式如下:其中:namespace為關鍵字。名稱為名字空間標識符。成員為函數(shù)、變量、常量、自定義類型等。

namespace名稱

{

成員;

}4.4名字空間例如:一個名為TsingHua的軟件公司為自己的組件建立了一個名字空間。將它存入頭文件:TsingHua.h/*************TsingHua.h**********/namespaceTsingHua{intyear=2009;charname[]="TsingHuaSoftware";ShowName(){

cout<<name<<""<<year<<endl;}}4.4名字空間(1)個別使用聲明方式,格式如下:

其中:::為作用域分辨符。成員使用形式包括函數(shù)調用式、變量名、常量名、類型名等名字空間名::成員使用形式/******************************p4_6.cpp**名字空間

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論