第8章 運(yùn)算符重載_第1頁
第8章 運(yùn)算符重載_第2頁
第8章 運(yùn)算符重載_第3頁
第8章 運(yùn)算符重載_第4頁
第8章 運(yùn)算符重載_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章運(yùn)算符重載8.1概述運(yùn)算符只能用于標(biāo)準(zhǔn)類型的數(shù)據(jù)的運(yùn)算,而不能用于類的對(duì)象。如果使用運(yùn)算符對(duì)類的對(duì)象進(jìn)行運(yùn)算,就必須對(duì)運(yùn)算符進(jìn)行重載。8.1.1什么是運(yùn)算符重載在2.4.3節(jié)中,談到通過定義多個(gè)同名函數(shù)可以實(shí)現(xiàn)函數(shù)的重載。在C++語言中,運(yùn)算符也被看成一種特殊的函數(shù),因此也能夠被重載。在前面已經(jīng)接觸過很多運(yùn)算符重載的例子。例如:cout<<"Helloworld!";cout<<56;在這里,同一個(gè)運(yùn)算符“<<”,完成了兩種不同類型數(shù)據(jù)的輸出,這就是通過對(duì)運(yùn)算符“<<”重載的結(jié)果。運(yùn)算符除了可以用于操作標(biāo)準(zhǔn)數(shù)據(jù)類型的數(shù)據(jù)外,也可以通過重載來操作類的對(duì)象。8.1.2運(yùn)算符重載規(guī)則1.C++語言中允許重載的運(yùn)算符C++語言中大部分運(yùn)算符都可以重載,如表8.1所示,表中列出了所有允許重載的運(yùn)算符。C++語言中不允許重載的運(yùn)算符只有5個(gè):. 成員訪問運(yùn)算符* 成員指針訪問運(yùn)算符?: 條件運(yùn)算符:: 域運(yùn)算符sizeof

取長度運(yùn)算符其中,前兩個(gè)的功能是不允許改變的,而::和sizeof的運(yùn)算對(duì)象是數(shù)據(jù)類型而不是變量或表達(dá)式。2.運(yùn)算符重載不能改變運(yùn)算符的優(yōu)先級(jí)和結(jié)合性C++語言內(nèi)部已經(jīng)規(guī)定了所有運(yùn)算符的優(yōu)先級(jí)。例如,“!”的優(yōu)先級(jí)高于“&&”。不論運(yùn)算符作用于什么對(duì)象,該優(yōu)先級(jí)都不能改變。另外,也不能通過重載,改變一個(gè)運(yùn)算符的結(jié)合性。3.運(yùn)算符重載不能改變運(yùn)算符的操作數(shù)的個(gè)數(shù)單目運(yùn)算符只能包含一個(gè)操作數(shù),雙目運(yùn)算符必須有兩個(gè)操作數(shù),不能試圖通過運(yùn)算符重載改變操作數(shù)的個(gè)數(shù)。某些運(yùn)算符,如-和*,既是單目運(yùn)算符,也是雙目運(yùn)算符,一次重載只能使用其中一種含義。4.運(yùn)算符重載不能使用默認(rèn)參數(shù)與普通的函數(shù)重載不同,運(yùn)算符重載時(shí),不能使用默認(rèn)的參數(shù)值,必須明確指出每一個(gè)操作數(shù)。5.運(yùn)算符重載只能作用于自定義類型6.不能建立新的運(yùn)算符7.不能改變運(yùn)算符的含義8.運(yùn)算符必須顯式重載,不能隱式重載例如,重載了運(yùn)算符+和運(yùn)算符=后,語句obj3=obj1+obj2;是正確的,但是語句obj1+=obj2;是不正確的。要想使該語句成立,必須顯式重載運(yùn)算符+=。8.1.3運(yùn)算符重載的方式運(yùn)算符也是一種特殊的函數(shù),為了能夠操作對(duì)象的數(shù)據(jù)成員,在進(jìn)行重載時(shí)主要采用兩種方式:成員函數(shù)方式和友元函數(shù)方式。當(dāng)作為成員函數(shù)進(jìn)行重載時(shí),它的左操作數(shù)必須是該成員函數(shù)所屬類的一個(gè)對(duì)象,因?yàn)楸仨毻ㄟ^類的對(duì)象調(diào)用該類的成員函數(shù)。當(dāng)左操作數(shù)是標(biāo)準(zhǔn)類型的變量或者是其他類的對(duì)象時(shí),必須使用友元函數(shù)進(jìn)行重載。當(dāng)需要保留某些運(yùn)算符的交換性時(shí),必須使用友元函數(shù)進(jìn)行重載。如果希望程序中能夠同時(shí)接受下面的語句:obj1=1+obj2;和obj1=obj2+1;此時(shí),必須使用友元函數(shù)進(jìn)行重載。因?yàn)樵谑褂贸蓡T函數(shù)進(jìn)行重載時(shí),左操作數(shù)必須為類的對(duì)象,不能為標(biāo)準(zhǔn)類型。通常,將單目運(yùn)算符重載為成員函數(shù),將雙目運(yùn)算符重載為友元函數(shù)。8.2雙目運(yùn)算符重載1.用成員函數(shù)重載雙目運(yùn)算符當(dāng)使用成員函數(shù)重載雙目運(yùn)算符時(shí),原型為:<類型>operator@(<形參>){

函數(shù)體;}其中,<類型>為運(yùn)算符運(yùn)算結(jié)果所屬類型,operator是定義運(yùn)算符重載函數(shù)的關(guān)鍵字,@為要重載的運(yùn)算符。由于每個(gè)非靜態(tài)成員函數(shù)都帶有一個(gè)隱含的自引用參數(shù)this指針,形參表中的唯一的形參充當(dāng)了雙目運(yùn)算符的右參數(shù),左參數(shù)由調(diào)用該運(yùn)算符的對(duì)象充當(dāng)?!纠?.1】定義復(fù)數(shù)類,并用成員函數(shù)重載運(yùn)算符+。#include<iostream>usingnamespacestd;classMyComplex{doublereal,imag;public:

MyComplex(doublea,doubleb);

MyComplex();

MyComplex

operator+(MyComplex&c); //重載運(yùn)算符+

MyComplex

operator+(intn); //重載運(yùn)算符+voidprint(

);};MyComplex::MyComplex():real(0),imag(0){}MyComplex::MyComplex(doublea,doubleb):real(a),imag(b){}voidMyComplex::print(

){

cout<<"("<<real<<","<<imag<<")"<<endl;}MyComplex

MyComplex::operator+(MyComplex&c){returnMyComplex(this->real+c.real,this->imag+c.imag);}MyComplex

MyComplex::operator+(doublen){real+=n;return*this;}intmain(

){

MyComplexc1(2,-3),c2(5,6),c3;c3=c1+c2; //等價(jià)于c3=c1.operator(c2);c3.print(

);c1=c1+1; //等價(jià)于c1=c1.operator(1);c1.print(

);return0;}運(yùn)行結(jié)果:(7,3)(3,-3)2.用友元函數(shù)重載雙目運(yùn)算符用友元函數(shù)重載運(yùn)算符的原型為:friend<類型>operator@(<參數(shù)列表>);由于友元函數(shù)不是類的成員,沒有this指針,因此對(duì)于二元運(yùn)算符函數(shù),需要聲明兩個(gè)形參?!纠?.2】定義復(fù)數(shù)類,并用友元函數(shù)重載運(yùn)算符+。#include<iostream>usingnamespacestd;classMyComplex{doublereal,imag;public:

MyComplex(doublea,doubleb);

MyComplex(

);voidprint(

);//以下三個(gè)函數(shù)為重載運(yùn)算符+

friendMyComplex&operator+(MyComplex&c1,MyComplex&c2); friendMyComplex&operator+(MyComplex&c,doublen); friendMyComplex&operator+(doublen,MyComplex&c); };MyComplex::MyComplex(

):real(0),imag(0){}MyComplex::MyComplex(doublea,doubleb):real(a),imag(b){}voidMyComplex::print(

){

cout<<"("<<real<<","<<imag<<")"<<endl;}MyComplex&operator+(MyComplex&c1,MyComplex&c2){returnMyComplex(c1.real+c2.real,c1.imag+c2.imag);}MyComplex&operator+(MyComplex&c,doublen){

c.real+=n;returnc;}MyComplex&operator+(doublen,MyComplex&c){

c.real+=n;returnc;}intmain(

){

MyComplexc1(2,-3),c2(5,6),c3;c3=c1+c2; //等價(jià)于c3=operator(c1,c2);c3.print(

);c1=c1+1; //等價(jià)于c1=operator(c1,1);c1=1+c1; //等價(jià)于c1=operator(1,c1);c1.print(

);return0;}運(yùn)行結(jié)果:(7,3)(4,-3)8.3單目運(yùn)算符重載重載單目運(yùn)算符的方法與重載雙目運(yùn)算符的方法是類似的,由于單目運(yùn)算符只有一個(gè)操作數(shù),該操作數(shù)必須是類的對(duì)象或?qū)ο蟮囊谩?.用成員函數(shù)重載單目運(yùn)算符當(dāng)使用成員函數(shù)重載單目運(yùn)算符時(shí),原型為:<類型>operator@(

){

函數(shù)體;}由于每個(gè)非靜態(tài)成員函數(shù)都帶有一個(gè)隱含的自引用參數(shù)this指針,對(duì)于一元運(yùn)算符函數(shù),不能再顯式聲明形參,所需要的形參由自引用參數(shù)提供?!纠?.3】用成員函數(shù)重載運(yùn)算符,實(shí)現(xiàn)復(fù)數(shù)一元減法。#include<iostream>usingnamespacestd;classMyComplex{doublereal,imag;public:

MyComplex(doublea,doubleb);

MyComplex();voidprint(

);

MyComplexoperator-(

); //重載運(yùn)算符-};MyComplex::MyComplex():real(0),imag(0){}MyComplex::MyComplex(doublea,doubleb):real(a),imag(b){}voidMyComplex::print(

){

cout<<"("<<real<<","<<imag<<")"<<endl;}MyComplex

MyComplex::operator-(

){returnMyComplex(-real,-imag);}intmain(

){

MyComplexc1(2,-3);c1=-c1;c1.print(

);

getchar(

);return0;}運(yùn)行結(jié)果:(-2,3)2.用友元函數(shù)重載單目運(yùn)算符【例8.4】用友元函數(shù)重載運(yùn)算符,實(shí)現(xiàn)復(fù)數(shù)一元減法。#include<iostream>usingnamespacestd;classMyComplex{doublereal,imag;public:

MyComplex(doublea,doubleb);

MyComplex();voidprint(

);friendMyComplexoperator-(MyComplex&c); //重載運(yùn)算符-};MyComplex::MyComplex():real(0),imag(0){}MyComplex::MyComplex(doublea,doubleb):real(a),imag(b){}voidMyComplex::print(

){

cout<<"("<<real<<","<<imag<<")"<<endl;}MyComplexoperator-(MyComplex&c){returnMyComplex(-c.real,-c.imag);}intmain(

){

MyComplexc1(2,-3);c1=-c1;c1.print(

);return0;}運(yùn)行結(jié)果:(-2,3)8.4賦值運(yùn)算符重載8.4.1賦值運(yùn)算符重載與深復(fù)制在3.5節(jié)中曾經(jīng)談到“淺復(fù)制”和“深復(fù)制”問題。在例3.9中,類MyTest包含一個(gè)int型數(shù)據(jù)成員x和一個(gè)char*型數(shù)據(jù)成員s,考慮如下語句:MyTestc1(2,"Hello"),c2;c2=c1;在執(zhí)行賦值語句時(shí),系統(tǒng)會(huì)自動(dòng)將c1.x賦值給c2.x,c1.s賦值給c2.s,如圖8.1所示。由于c1.s和c2.s指向同一個(gè)存儲(chǔ)單元,因此一旦c1和c2其中的任何一個(gè)被釋放,都會(huì)影響到另外一個(gè),這就是“淺復(fù)制”。通常,在進(jìn)行復(fù)制時(shí)需要進(jìn)行“深復(fù)制”,即令c1.s和c2.s指向不同的內(nèi)存單元,這就需要對(duì)賦值運(yùn)算符重載。圖8.1淺復(fù)制8.4.2賦值運(yùn)算符重載格式由于賦值運(yùn)算符只能通過成員函數(shù)進(jìn)行重載,而不能通過友元函數(shù)重載,因此在對(duì)賦值運(yùn)算符重載時(shí),應(yīng)該具備如下結(jié)構(gòu):<類名>&<類名>::operator=(<形參obj>){if(this!=&obj){deletedobj;//釋放引用者已經(jīng)分配的動(dòng)態(tài)存儲(chǔ)空間(空間首址dobj)

//使用new為引用者分配與形參obj對(duì)象同樣大小的動(dòng)態(tài)存儲(chǔ)空間

//將形參obj對(duì)象的動(dòng)態(tài)存儲(chǔ)空間中的數(shù)據(jù)賦給引用者對(duì)象的dobj成員

return*this; //返回引用者對(duì)象}【例8.5】改造例3.9,實(shí)現(xiàn)深復(fù)制。#include<string.h>#include<iostream>usingnamespacestd;classMyTest{

intx;char*s;public:

MyTest(intx1,char*s1);

MyTest(

){}~MyTest(

);

MyTest&operator=(MyTest&m);

MyTest&operator=(char*p);voidsetX(intx1);voidsetS(char*s1);voidprint(

);};MyTest::MyTest(intx1,char*s1){x=x1;s=newchar[strlen(s1)+1];

strcpy(s,s1);}MyTest::~MyTest(

){delete[]s;}MyTest&MyTest::operator=(MyTest&m){

if(this!=&m){

if(!s)delete[]s;x=m.x;s=newchar[strlen(m.s)+1];

strcpy(s,m.s);return*this;}}MyTest&MyTest::operator=(char*p){

if(!s)delete[]s;s=newchar[strlen(p)+1];

strcpy(s,p);return*this;}voidMyTest::setX(intx1){x=x1;}voidMyTest::setS(char*s1){

strcpy(s,s1);}voidMyTest::print(

){

cout<<x<<","<<s<<endl;}intmain(

){

MyTestc1(2,"Hello!"),c2(1,"Good!");c2=c1;c1.print(

);c2.print(

);c1.setX(-1);c2.setS("Good");c1.print(

);c2.print(

);c1="What?";c1.print(

);

getchar(

);return0;}運(yùn)行結(jié)果:2,Hello!2,Hello!-1,Hello!2,Good!-1,What?8.4.3賦值運(yùn)算符重載函數(shù)與復(fù)制初始化構(gòu)造函數(shù)賦值運(yùn)算符重載函數(shù)和復(fù)制初始化構(gòu)造函數(shù)都是用來把一個(gè)類的對(duì)象復(fù)制到另一個(gè)同類型的對(duì)象。然而它們被調(diào)用的時(shí)機(jī)是不同的:(1)復(fù)制初始化構(gòu)造函數(shù)是用已存在對(duì)象的各成員當(dāng)前值來創(chuàng)建一個(gè)相同的新對(duì)象。在下述三種情況下,系統(tǒng)將自動(dòng)調(diào)用所屬類的復(fù)制初始化構(gòu)造函數(shù)。①定義一個(gè)新的對(duì)象同時(shí)利用一個(gè)已有對(duì)象初始化的情況。②一個(gè)對(duì)象被作為函數(shù)參數(shù)的情況。③對(duì)象作為函數(shù)值進(jìn)行返回的情況。(2)賦值運(yùn)算符重載函數(shù)僅在賦值語句中被調(diào)用,用于把一個(gè)已存在對(duì)象的各成員的值賦值給另一個(gè)已存在的同類對(duì)象。例8.6】分析下面程序的輸出結(jié)果。#include<string.h>#include<iostream>usingnamespacestd;classString{char*buffer;public:String(char*s);String(

){}

String(String&s);~String(

);String&operator=(String&m);String&operator=(char*p);voidprint(

);};String::String(char*s){buffer=newchar[strlen(s)+1];

strcpy(buffer,s);}String::String(String&s){buffer=newchar[strlen(s.buffer)+1];

strcpy(buffer,s.buffer);}String::~String(

){delete[]buffer;}String&String::operator=(String&m){

if(this!=&m){

if(!buffer)delete[]buffer;buffer=newchar[strlen(m.buffer)+1];

strcpy(buffer,m.buffer);return*this;}}String&String::operator=(char*p){

if(!buffer)delete[]buffer;buffer=newchar[strlen(p)+1];

strcpy(buffer,p);return*this;}voidString::print(

){

cout<<buffer<<endl;}intmain(

){Strings1("Hello!"),s2("Good!"),s3;s1=s2; //調(diào)用第一個(gè)重載賦值運(yùn)算符函數(shù)

s3="What?"; //調(diào)用第二個(gè)重載賦值運(yùn)算符函數(shù)

Strings4=s3; //調(diào)用復(fù)制初始化構(gòu)造函數(shù)

s1.print(

);s2.print(

);s3.print(

);s4.print(

);return0;}運(yùn)行結(jié)果:Good!Good!What?What?8.5幾個(gè)典型運(yùn)算符的重載8.5.1++和運(yùn)算符重載++和運(yùn)算符是單目運(yùn)算符,它們又分為前綴形式和后綴形式兩種,在重載時(shí)既可以用成員函數(shù)重載,也可以使用友元函數(shù)重載。用成員函數(shù)重載前綴++運(yùn)算符的格式為: <類型>

<類名>::operator++();用成員函數(shù)重載后綴++運(yùn)算符的格式為:

<類型>

<類名>::operator++(int);為了區(qū)分++運(yùn)算符的前綴運(yùn)算和后綴運(yùn)算,需要將后綴運(yùn)算重載為雙目運(yùn)算符。后綴運(yùn)算符中的參數(shù)起到一個(gè)占位符的作用,在函數(shù)體內(nèi)并不使用,因此通常不給出參數(shù)的名字。【例8.7】用成員函數(shù)形式重載運(yùn)算符++和。#include<iostream>usingnamespacestd;classTime{

inthour;//時(shí)

intminute;//分

intsec;//秒public:Time(inth,intm,ints);Time(

){}Time&operator++(

); //前綴++運(yùn)算

Time&operator++(int); //后綴++運(yùn)算

Time&operator--(

); //前綴--運(yùn)算

Time&operator--(int); //后綴--運(yùn)算

voidshow(

);};Time::Time(inth,intm,ints){hour=h;minute=m;sec=s;}Time&Time::operator++(

){

if(++sec==60){ //滿60秒進(jìn)1分鐘

sec=0;

if(++minute==60){ //滿60分鐘進(jìn)1小時(shí)

minute=0;

if(++hour==24) //滿24小時(shí)進(jìn)1天

hour=0;}}return*this;}Time&Time::operator++(int){Timet=*this;

if(++sec==60){ //滿60秒進(jìn)1分鐘

sec=0;

if(++minute==60){ //滿60分鐘進(jìn)1小時(shí)

minute=0;

if(++hour==24) //滿24小時(shí)進(jìn)1天

hour=0;}}returnt; //返回自增前的時(shí)間值}Time&Time::operator--(

){if(--sec<0){ //不足0秒退到前1分鐘

sec=59;if(--minute<0){ //不足0分退到前1小時(shí)

minute=59;if(--hour<0) //不足01小時(shí)推到前1天

hour=23;}}return*this;}Time&Time::operator--(int){Timet=*this;if(--sec<0){{ //不足0秒退到前1分鐘

sec=59;if(--minute<0){ //不足0分退到前1小時(shí)

minute=59;if(--hour<0) //不足01小時(shí)推到前1天

hour=23;}}returnt; //返回自減前的時(shí)間值}voidTime::show(

){

cout<<hour<<":"<<minute<<":"<<sec<<endl;}intmain(

){Timet1(23,59,59),t2(17,0,0),t3;++t1;t3=t1++;t1.show(

);t3.show(

);--t2;t3=t2--;t2.show(

);t3.show(

);

getchar(

);return0;}運(yùn)行結(jié)果:0:0:10:0:016:59:5816:59:59用友元函數(shù)重載前綴++運(yùn)算符的格式為:

<類型>

<類名>::operator++(<類名>&);用友元函數(shù)重載后綴++運(yùn)算符的格式為:

<類型>

<類名>::operator++(<類名>&,int);同樣,需要將后綴運(yùn)算重載為雙目運(yùn)算符,后綴運(yùn)算符中的第2個(gè)參數(shù)也起到占位符的作用,在函數(shù)體內(nèi)并不使用。8.5.2[]運(yùn)算符重載對(duì)于一些容器類(如前面講過的數(shù)組類、集合類和字符串類等),通常需要獲得某個(gè)元素的值,這可以通過為類定義專門的成員函數(shù)實(shí)現(xiàn),但更方便的做法是在容器類中重載下標(biāo)運(yùn)算符[]。[

]運(yùn)算符只能重載為成員函數(shù),而不能重載為友元函數(shù)。一旦在容器類中重載了[

]運(yùn)算符,就可以將該類當(dāng)做數(shù)組進(jìn)行處理,可以使用下標(biāo)方式來存取其中的元素。[

]運(yùn)算符的重載格式通常為:<類型>

&operator[](int);該重載函數(shù)只能有一個(gè)參數(shù)用于表示下標(biāo)。[

]運(yùn)算符必須能夠出現(xiàn)在一個(gè)賦值操作符的左、右兩邊。為了能在左邊出現(xiàn)它的返回值且是一個(gè)左值,可以把返回類型指定為一個(gè)引用。【例8.8】重載運(yùn)算符[]。#include<string.h>#include<iostream>usingnamespacestd;constintLIMIT=20;classMyArray{private:

intsize; //數(shù)組大小

int*array; //數(shù)組元素起始地址public:

MyArray(int=1);

int&operator[](intn);~MyArray(

);};MyArray::MyArray(inti){

if(i<0||i>LIMIT) { //數(shù)組越界檢查

cout<<"數(shù)組越界"<<endl;exit(1);}size=i;array=newint[size];}int&MyArray::operator[](inti){

if(i<0||i>=size) { //下標(biāo)越界檢查

cout<<"下標(biāo)越界"<<endl;exit(1);}returnarray[i];}MyArray::~MyArray(

){delete[]array;size=0;}intmain(

){

intindex;

MyArrayarray(5);

for(inti=0;i<5;i++)

array[i]=i;

cout<<"輸入所要查看元素的個(gè)數(shù)(1~20):";

cin>>index;

for(inti=0;i<index;i++)

cout<<"array["<<i<<"]"<<"="<<array[i]<<endl;return0;}第1次運(yùn)行結(jié)果:輸入所要查看元素的個(gè)數(shù)(1~20):3↙array[0]=0array[1]=1array[2]=2第2次運(yùn)行結(jié)果:輸入所要查看元素的個(gè)數(shù)(1~20):6↙array[0]=0array[1]=1array[2]=2array[3]=3array[4]=4下標(biāo)越界8.5.3(

)運(yùn)算符重載在C++語言中,函數(shù)調(diào)用func(arg1,arg2,…);被解釋為:func.operator(

)(arg1,arg2,…);與[

]運(yùn)算符一樣,(

)運(yùn)算符也可以重載。由于它的參數(shù)不止一個(gè),因此(

)運(yùn)算符常??闯墒菍?duì)[]運(yùn)算符的擴(kuò)展。當(dāng)需要用1個(gè)以上的對(duì)象檢索一個(gè)對(duì)象時(shí),可以使用(

)運(yùn)算符。與[]一樣,(

)運(yùn)算符必須重載為成員函數(shù)。【例8.9】重載運(yùn)算符(

)。#include<string.h>#include<iostream>usingnamespacestd;constintLIMIT=20;classMyArray{private:

intsize1; //行數(shù)

intsize2; //列數(shù)

int*array; //數(shù)組元素起始地址public:

MyArray(int=1,int=1);

int&operator(

)(inti,intj);~MyArray(

);};MyArray::MyArray(inti,intj){

if((i<0||i>LIMIT)||(j<0||j>LIMIT)){ //數(shù)組越界檢查

cou

溫馨提示

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

評(píng)論

0/150

提交評(píng)論