C語(yǔ)言程序設(shè)計(jì)課件:繼承與多態(tài)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:繼承與多態(tài)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:繼承與多態(tài)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:繼承與多態(tài)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件:繼承與多態(tài)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

繼承與多態(tài)C語(yǔ)言程序設(shè)計(jì)目錄content繼承的實(shí)現(xiàn)方式1子類的構(gòu)造函數(shù)順序2多繼承3多態(tài)的實(shí)現(xiàn)方式4虛函數(shù)表5重載、隱藏和覆蓋的區(qū)別613.1繼承的實(shí)現(xiàn)方式繼承機(jī)制允許類自動(dòng)從一個(gè)或更多的類中繼承其特性、行為和數(shù)據(jù)結(jié)構(gòu),允許根據(jù)需要進(jìn)行更具體的定義來(lái)建立新類,即派生類。派生類對(duì)于基類的繼承提供了代碼的重用性,而派生類的增加部分提供了對(duì)原有代碼擴(kuò)充和改進(jìn)的能力。class<派生類名>:<繼承方式><基類名>{<派生新類定義成員>};單繼承定義的格式為class是關(guān)鍵字,<派生類名>是新定義的一個(gè)類的名字,它是從<基類名>中派生的,并且是按指定的<繼承方式>派生的。冒號(hào)“:”將派生類與基類的名字分開,用于建立派生類和基類之間的層次關(guān)系。13.1.1公有繼承class<派生類名>:public<基類名>{<派生新類定義成員>};繼承方式為public

基類的公有成員和保護(hù)成員的訪問(wèn)屬性在派生類中不變,而基類的私有成員不可直接訪問(wèn)?;恜ublicprotectedprivate子類publicprotected不可見13.1.1公有繼承class

Student

//

聲明基類

{

private:

int

num;

string

name;

char

sex;

public:

void

get_value()

{

cin

>>

num

>>

name

>>

sex;

}

void

display()

{

cout

<<

"num:

"

<<

num

<<

endl;

cout

<<

"name:

"

<<

name

<<

endl;

cout

<<

"sex:

"

<<

sex

<<

endl;

}

};

class

Student1:

public

Student

//派生類{

private:

int

age;

string

addr;

public:

void

get_value_1()

{

cin

>>

age

>>

addr;

}

void

display_1()

{

//cout<<"num:

"<<num<<endl;

//

錯(cuò)誤

//cout<<"name:

"<<name<<endl;

//

錯(cuò)誤

//cout<<"sex:

"<<sex<<endl;

//

錯(cuò)誤

cout

<<

"age:

"

<<

age

<<

endl;

//

正確

cout

<<

"address:

"

<<

addr

<<

endl;

//

正確

}

};13.1.2私有繼承class<派生類名>:private<基類名>{<派生新類定義成員>};繼承方式為private基類中的公有成員和保護(hù)成員都以私有成員的身份出現(xiàn)在派生類中,而基類的私有成員在派生類中不可直接訪問(wèn)。基類publicprotectedprivate子類privateprivate不可見class

Student1:

private

Student

{

private:

int

age;

string

addr;

public:

void

display_1()

{

display();

cout

<<

"age:

"

<<

age

<<

endl;

//正確

cout

<<

"address:

"

<<

addr

<<

endl;

//正確

}

};

int

main()

{

Student1

stud1;

stud1.display_1();

return

0;

}13.1.2私有繼承示例13-2私有繼承

13.1.3保護(hù)繼承class<派生類名>:protected<基類名>{<派生新類定義成員>};繼承方式為protected基類的公有成員和保護(hù)成員都以保護(hù)成員的身份出現(xiàn)在派生類中,而基類的私有成員變量不可直接訪問(wèn)?;恜ublicprotectedprivate子類protectedprotected不可見

class

Student

//

聲明基類

{

protected:

//

基類保護(hù)成員

int

num;

string

name;

char

sex;

public:

//

基類公用成員

void

display();

};

class

Student1:

protected

Student

{

private:

int

age;

string

addr;

public:

void

display1();

};

void

Student1::display1()

{

cout

<<

"num:

"

<<

num

<<

endl;

//引用基類的保護(hù)成員

cout

<<

"name:

"

<<

name

<<

endl;

cout

<<

"sex:

"

<<

sex

<<

endl;

cout

<<

"age:

"

<<

age

<<

endl;

cout

<<

"address:

"

<<

addr

<<

endl;

}

13.1.3保護(hù)繼承示例13-3保護(hù)繼承

13.1.4訪問(wèn)控制相關(guān)分析分析圖13.1中不同模塊對(duì)x、y、z的訪問(wèn)特性在A類中可以對(duì)x、y、z直接進(jìn)行訪問(wèn)在B類中可以對(duì)x、y直接進(jìn)行訪問(wèn),不能對(duì)z直接進(jìn)行訪問(wèn)在C類中可以對(duì)x、y直接進(jìn)行訪問(wèn),不能對(duì)z直接進(jìn)行訪問(wèn)

平行模塊中可以對(duì)x直接進(jìn)行訪問(wèn),不能對(duì)y、z進(jìn)行訪問(wèn)

對(duì)不允許客戶直接操作的成員變量應(yīng)設(shè)置為私有,并提供接口即公有成員函數(shù)來(lái)訪問(wèn)該變量。在子類中除了繼承的成員,自己添加的新成員也應(yīng)該遵循這種設(shè)計(jì)思想。13.1.4訪問(wèn)控制相關(guān)分析13.2子類的構(gòu)造函數(shù)的順序#include

<iostream.h>

class

animal

{

public:

animal(int

height,

int

weight)

{

cout

<<

"animal

construct"

<<

endl;

}

~animal()

{

cout

<<

"animal

destruct"

<<

endl;

}

void

eat()

{

cout

<<

"animal

eat"

<<

endl;

}

void

sleep()

{

cout

<<

"animal

sleep"

<<

endl;

}

void

breathe()

{

cout

<<

"animal

breathe"

<<

endl;

}

};

class

fish:

public

animal

{

public:

fish()

{

cout

<<

"fish

construct"

<<

endl;

}

~fish()

{

cout

<<

"fish

destruct"

<<

endl;

}

};

void

main()

{

fish

fh;

}示例13-4子類構(gòu)造函數(shù)順序示例

當(dāng)構(gòu)造fish子類的對(duì)象fh時(shí),它需要先構(gòu)造animal父類的對(duì)象,調(diào)用animal父類的默認(rèn)構(gòu)造函數(shù)(即不帶參數(shù)的構(gòu)造函數(shù))13.2子類的構(gòu)造函數(shù)的順序

子類構(gòu)造函數(shù)中想要調(diào)用父類有參數(shù)的構(gòu)造函數(shù)(或子類要向父類的構(gòu)造函數(shù)傳遞參數(shù))時(shí),可以在成員初始化列表中指明。

格式為:

子類名::子類名(參數(shù)):父類名(參數(shù))13.2子類的構(gòu)造函數(shù)的順序#include<iostream.h>#include<string.h>classPerson{protected: char*pname;public: Person(char*p){ pname=newchar[strlen(p)+1]; strcpy(pname,p);}};

classStudent:publicPerson{protected: intscore; constintID; int&QQ;public:Student(char*p,inti);};Student::Student(char*p,inti):Person(p),ID(1),QQ(t){score=i;}voidmain(){ Students("tom",98);}示例13-5子類調(diào)用父類構(gòu)造函數(shù)13.2子類的構(gòu)造函數(shù)的順序#include

<iostream.h>

class

animal

{

public:

animal(int

height,

int

weight)

{

cout

<<

"animal

construct"

<<

endl;

}

};

class

fish:

public

animal

{

public:

fish()

{

this->animal::animal(400,

300);

}

};

void

main()

{

fish

fh;

}此外還可以使用this指針來(lái)調(diào)用父類有參數(shù)的構(gòu)造函數(shù)13.2子類的構(gòu)造函數(shù)的順序class

Person

{

char

*name;

int

age;

char

sex;

public:

Person()

{

name

=

NULL;

}

Person(const

char

*n,

int

a,

char

s):

age(a),

sex(s)

{

name

=

new

char[strlen(n)

+

1];

strcpy(name,

n);

cout

<<

"Person

construct"

<<

endl;

}

~Person()

{

delete

name;

}

};

class

Student:

public

Person

{

Person

contacts;

int

score;

public:

Student(const

char

*n,

int

a,

char

s,

Person

&p,

int

i):contacts(n,

a,

s),

score(i)

{

cout

<<

"Student

construct"

<<

endl;

}

};

int

main()

{

Person

dad("Tom",

40,

'M');

Student

son("Jerry",

15,

'M',

dad,

100);

}當(dāng)子類的新增成員中有父類的對(duì)象成員時(shí),也是遵循先執(zhí)行父類構(gòu)造函數(shù),再執(zhí)行子類構(gòu)造函數(shù)13.3多繼承

多繼承是單繼承的擴(kuò)展,所謂的多繼承指的是一個(gè)派生類可以有多個(gè)基類,派生類與每個(gè)基類之間的關(guān)系仍然可以看成是單繼承。多繼承下派生類的定義格式如下:class<派生類名>:<繼承方式1><基類名1>,<繼承方式2><基類名2>……{<派生類類體>};classA{…};classB{…};classC:publicA,publicB{…};例如13.3.2多繼承的構(gòu)造函數(shù)<派生類名>(<總參數(shù)表>):<基類名1>(<參數(shù)表1>),<基類名2>(<參數(shù)表2>),…

<子對(duì)象名>(<參數(shù)表n+1>),…{<派生類構(gòu)造函數(shù)體>}

在多繼承的情況下,派生類的構(gòu)造函數(shù)格式如下:

其中,<總參數(shù)表>中各個(gè)參數(shù)包含了其后的各個(gè)分參數(shù)表。

多繼承下派生類的構(gòu)造函數(shù)與單繼承下派生類構(gòu)造函數(shù)相似,它必須同時(shí)負(fù)責(zé)該派生類所有基類構(gòu)造函數(shù)的調(diào)用。

派生類構(gòu)造函數(shù)執(zhí)行順序是先執(zhí)行所屬基類的構(gòu)造函數(shù),再執(zhí)行派生類本身構(gòu)造函數(shù),處于同一層次的各基類構(gòu)造函數(shù)的執(zhí)行順序取決于定義派生類時(shí)所指定的各基類順序,與派生類構(gòu)造函數(shù)中所定義的成員初始化列表的各項(xiàng)順序無(wú)關(guān)。13.3.2#include

<iostream.h>

class

B1

{

public:

B1(int

i)

{…}};

class

B2

{

public:

B2(int

i)

{…}};

class

B3

{

public:

B3(int

i)

{…}};

class

A:

public

B2,

public

B1

{

public:

A(int

i,

int

j,

int

k,

int

l):

B1(i),

B2(j),

bb(k)

{

a

=

1;

cout

<<

"構(gòu)造函數(shù)

A."

<<

a

<<

endl;

}

private:

int

a;

B3bb;};

例如多繼承的構(gòu)造函數(shù)13.3.3多繼承的二義性問(wèn)題

一般說(shuō)來(lái),在派生類中對(duì)基類成員的訪問(wèn)應(yīng)該是唯一的,但是,由于多繼承情況下,可能造成對(duì)基類中某成員的訪問(wèn)出現(xiàn)了不唯一的情況,則稱為對(duì)基類成員訪問(wèn)的二義性問(wèn)題。解決辦法是通過(guò)作用域運(yùn)算符::進(jìn)行限定。class

A

{

public:

void

f();

};

class

B

{

public:

void

f();

void

g();

};

class

C:

public

A,

public

B

{

public:

void

g();

void

h();

};

例如1)對(duì)函數(shù)f()的訪問(wèn)c1.f();便具有二義性,解決辦法c1.A::f()或者c1.B::f()。2)c1.g()不存在二義性,它是指C::g(),而不是指B::g()。因?yàn)橐?guī)定派生類的成員將支配基類中的同名成員。class

A

{

public:

int

a;

};

class

B1:

public

A

{

private:

int

b1;

};

class

B2:

public

A

{

private:

int

b2;

};

class

C:

public

B1,

public

B2

{

public:

int

f();

private:

int

c;

};當(dāng)一個(gè)派生類從多個(gè)基類派生而來(lái),而這些基類又有一個(gè)共同的基類,則對(duì)該基類中聲明的成員進(jìn)行訪問(wèn)時(shí),也可能會(huì)出現(xiàn)二義性。已知:Cc1;下面的兩個(gè)訪問(wèn)都有二義性:

c1.a;

c1.A::a;而下面的兩個(gè)訪問(wèn)是正確的:

c1.B1::a;

c1.B2::a;由于二義性的原因,一個(gè)類不可以從同一個(gè)類中直接繼承一次以上,例如:

classA:publicB,publicB這是錯(cuò)誤的。13.3.3多繼承的二義性問(wèn)題【學(xué)習(xí)提示】(1)派生類對(duì)基類成員可以有不同的訪問(wèn)方式:a)派生類可以覆蓋基類成員b)派生類不能訪問(wèn)基類私有成員c)公有繼承基類的公有段和保護(hù)段成員訪問(wèn)權(quán)對(duì)派生類保持不變d)私有繼承基類的公有段和保護(hù)段成員成為派生類的私有成員(2)派生類構(gòu)造函數(shù)聲明為派生類構(gòu)造函數(shù)(參數(shù)表):基類(參數(shù)表),對(duì)象成員(參數(shù)表)執(zhí)行順序:

先長(zhǎng)輩

基類

再客人

對(duì)象成員

后自己

派生類13.3.3多繼承的二義性問(wèn)題13.4多態(tài)的實(shí)現(xiàn)方式 C++多態(tài)性是通過(guò)虛函數(shù)來(lái)實(shí)現(xiàn)的,虛函數(shù)允許子類重新定義成員函數(shù),而子類重新定義父類的做法稱為覆蓋(override)。而重載(overload)并沒(méi)有體現(xiàn)多態(tài)性。

多態(tài)實(shí)現(xiàn)的途徑是聲明基類的指針,利用該指針指向任意一個(gè)子類對(duì)象,調(diào)用相應(yīng)的虛函數(shù)。多態(tài)與非多態(tài)的實(shí)質(zhì)區(qū)別就是函數(shù)地址是早綁定還是晚綁定。封裝可以使得代碼模塊化,繼承可以擴(kuò)展已存在的代碼,他們的目的都是為了代碼重用。而多態(tài)的目的則是為了接口重用。13.4.1虛函數(shù)的聲明

虛函數(shù)是基類的公有部分或保護(hù)部分的某成員函數(shù),在函數(shù)頭前加上關(guān)鍵字“virtual”,其格式為:classA{public:(或protected:)virtual<返回類型>成員函數(shù)名(參數(shù)表);};13.4.2虛函數(shù)在派生類中的重新定義class

A

{

public:

virtual

void

print()

{

cout

<<

"This

is

A"

<<

endl;

}

};

class

B:

public

A

{

public:

void

print()

{

cout

<<

"This

is

B"

<<

endl;

}

};

虛函數(shù)在派生類重新定義時(shí),可以不再添加關(guān)鍵字virtual,定義格式與普通成員函數(shù)一樣int

main()

{

A

a;

B

b;

A

*p1

=

&a;

A

*p2

=

&b;

p1->print();

p2->print();

return

0;

}

輸出結(jié)果ThisisAThisisB如果把基類中virtual關(guān)鍵字去掉,輸出結(jié)果便成了ThisisAThisisA【幾點(diǎn)說(shuō)明】13.4.2虛函數(shù)在派生類中的重新定義(1)既然虛函數(shù)使用的目的是為了在多態(tài)的實(shí)現(xiàn)過(guò)程中,派生類可以重新實(shí)現(xiàn)基類函數(shù)的定義,那么虛函數(shù)可以在基類中沒(méi)有定義,要求任何派生類都定義自己的版本。這種虛函數(shù)稱為純虛函數(shù),其說(shuō)明形式為: virtual類型

函數(shù)名(參數(shù)表)=0;(2)如果一個(gè)類中至少有一個(gè)純虛函數(shù),則該類稱為抽象類。抽象類只能用作其他類的基類,抽象類不能建立對(duì)象,也不能用作參數(shù)類型、函數(shù)返回類型或顯式轉(zhuǎn)換的類型。但可以聲明抽象類的指針和引用。(3)由于純虛函數(shù)是沒(méi)有定義函數(shù)語(yǔ)句的基類虛函數(shù),派生類必須為每一個(gè)基類純虛函數(shù)提供相應(yīng)的函數(shù)定義。因此,如果從基類繼承來(lái)的純虛函數(shù),在派生類中沒(méi)有定義,該虛函數(shù)仍為純虛函數(shù),派生類仍為抽象類。13.4.3基類的析構(gòu)函數(shù)是virtual的

虛析構(gòu)函數(shù)是為了解決基類的指針指向派生類對(duì)象,并用基類的指針刪除派生類對(duì)象。

如果某個(gè)類不包含虛函數(shù),那一般是表示它將不作為一個(gè)基類來(lái)使用。當(dāng)一個(gè)類不準(zhǔn)備作為基類使用時(shí),使析構(gòu)函數(shù)為虛一般是個(gè)壞主意。因?yàn)樗鼤?huì)為類增加一個(gè)虛函數(shù)表,使得對(duì)象的體積翻倍,還有可能降低其可移植性。

所以基本的一條是:無(wú)故的聲明虛析構(gòu)函數(shù)和永遠(yuǎn)不去聲明一樣是錯(cuò)誤的。實(shí)際上,很多人這樣總結(jié):當(dāng)且僅當(dāng)類里包含至少一個(gè)虛函數(shù)的時(shí)候才去聲明虛析構(gòu)函數(shù)。

抽象類是準(zhǔn)備被用做基類的,基類必須要有一個(gè)虛析構(gòu)函數(shù),純虛函數(shù)會(huì)產(chǎn)生抽象類,所以方法很簡(jiǎn)單:在想要成為抽象類的類里聲明一個(gè)純虛析構(gòu)函數(shù)。class

ClxBase

{

public:

ClxBase(){};

virtual

~ClxBase(){};

virtual

void

DoSomething()

{

cout

<<

"Do

something

in

class

ClxBase!"

<<

endl;

}

};

class

ClxDerived:

public

ClxBase

{

public:

ClxDerived(){};

~ClxDerived()

{

cout

<<

"Output

from

the

destructor

of

class

ClxDerived!"

<<

endl;

}

void

DoSomething()

{

cout

<<

"Do

something

in

class

ClxDerived!"

<<

endl;

}

};

void

main()

{ClxBase*pTest=newClxDerived;pTest->DoSomething();deletepTest;}13.4.3基類的析構(gòu)函數(shù)是virtual的代碼的輸出結(jié)果是:DosomethinginclassClxDerived!OutputfromthedestructorofclassClxDerived!但是,如果把類ClxBase析構(gòu)函數(shù)前的virtual去掉,那輸出結(jié)果就是下面的樣子了:DosomethinginclassClxDerived!析構(gòu)函數(shù)不被調(diào)用的話就會(huì)造成內(nèi)存泄漏!虛析構(gòu)函數(shù)示例13.5虛函數(shù)表

虛函數(shù)(VirtualFunction)是通過(guò)一張?zhí)摵瘮?shù)表(VirtualTable)來(lái)實(shí)現(xiàn)的。簡(jiǎn)稱為V-Table。表中是一個(gè)類的虛函數(shù)的地址表,用父類的指針來(lái)操作一個(gè)子類的時(shí)候,指明了實(shí)際所應(yīng)該調(diào)用的函數(shù)。 C++的編譯器保證虛函數(shù)表的指針存在于對(duì)象實(shí)例中最前面的位置(這是為了保證取到的虛函數(shù)表有最高的性能——如果有多層繼承或是多重繼承的情況下)。這意味著通過(guò)對(duì)象實(shí)例的地址得到虛函數(shù)表,然后就可以遍歷其中的函數(shù)指針,并調(diào)用相應(yīng)的函數(shù)。classBase{public:virtualvoidf(){cout<<"Base::f"<<endl;}virtualvoidg(){cout<<"Base::g"<<endl;}virtualvoidh(){cout<<"Base::h"<<endl;}};typedefvoid(*Fun)(void);Baseb;FunpFun=NULL;cout<<"虛函數(shù)表地址:"<<(int*)(&b)<<endl;cout<<"虛函數(shù)表—第一個(gè)函數(shù)地址:"<<(int*)*(int*)(&b)<<endl;//InvokethefirstvirtualfunctionpFun=(Fun)*((int*)*(int*)(&b));pFun();假設(shè)有這樣的一個(gè)類可以通過(guò)Base的實(shí)例來(lái)得到虛函數(shù)表實(shí)際運(yùn)行經(jīng)果如下:虛函數(shù)表地址:0012FED4虛函數(shù)表—第一個(gè)函數(shù)地址:0044F148Base::f13.5虛函數(shù)表13.5虛函數(shù)表(Fun)*((int*)*(int*)(&b)+0);

//Base::f()(Fun)*((int*)*(int*)(&b)+1);

//Base::g()(Fun)*((int*)*(int*)(&b)+2);

//Base::h()通過(guò)強(qiáng)行把&b轉(zhuǎn)成int*,取得虛函數(shù)表的地址,然后,再次取址就可以得到第一個(gè)虛函數(shù)的地址了,也就是Base::f(),這在上面的程序中得到了驗(yàn)證(把int*強(qiáng)制轉(zhuǎn)成了函數(shù)指針)。注意:虛函數(shù)表最后有一個(gè)結(jié)點(diǎn),這是虛函數(shù)表的結(jié)束結(jié)點(diǎn),就像字符串的結(jié)束符“/0”一樣,其標(biāo)志了虛函數(shù)表的結(jié)束。這個(gè)結(jié)束標(biāo)志的值在不同的編譯器下是不同的。13.5虛函數(shù)表一般繼承:無(wú)虛函數(shù)覆蓋1)虛函數(shù)按照其聲明順序放于表中。2)父類的虛函數(shù)在子類的虛函數(shù)前面。請(qǐng)注意,在這個(gè)繼承關(guān)系中,子類沒(méi)有覆蓋任何父類的函數(shù)。對(duì)于實(shí)例Derived的虛函數(shù)表:13.5虛函數(shù)表一般繼承:有虛函數(shù)覆蓋對(duì)于實(shí)例Derived的虛函數(shù)表:覆蓋父類的虛函數(shù)是很顯然的事情,不然,虛函數(shù)就變得毫無(wú)意義。在這個(gè)類的設(shè)計(jì)中,只覆蓋了父類的一個(gè)函數(shù):f()。1)覆蓋的f()函數(shù)被放到了虛表中原來(lái)父類虛函數(shù)的位置。2)沒(méi)有被覆蓋的函數(shù)依舊。這就實(shí)現(xiàn)了多態(tài)。13.5虛函數(shù)表例#include

<iostream>

using

namespace

std;

class

Base

{

public:

virtual

void

f()

{

cout

<<

"Base::f"

<<

endl;

}

virtual

void

g()

{

cout

<<

"Base::g"

<<

endl;

}

virtual

void

h()

{

cout

<<

"Base::h"

<<

endl;

}

};

class

Derive1:

public

Base

{

virtual

void

f()

{

cout

<<

"Derive1::f"

<<

endl;

}

};

class

Derive2:

public

Base

{

virtual

void

f()

{

cout

<<

"Deriv

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論