浅拷贝和深拷贝ppt课件_第1页
浅拷贝和深拷贝ppt课件_第2页
浅拷贝和深拷贝ppt课件_第3页
浅拷贝和深拷贝ppt课件_第4页
浅拷贝和深拷贝ppt课件_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C/C+程序设计程序设计C/C+程序设计程序设计一、浅拷贝和深拷贝一、浅拷贝和深拷贝 对象作为数据的集合,其中有些数据需对象作为数据的集合,其中有些数据需求与变求与变量进展流通,有些数据需由不同的对象共享。量进展流通,有些数据需由不同的对象共享。 本章引见的深拷贝、友元函数、静态成本章引见的深拷贝、友元函数、静态成员和指员和指向成员的指针就是在不同的方面加快信息流向成员的指针就是在不同的方面加快信息流动以及动以及实施对象的维护的。实施对象的维护的。 C/C+程序设计程序设计 存在两种方式的类。存在两种方式的类。 一种方式的类中仅存在变量或对象,不具备指一种方式的类中仅存在变量或对象,不具备指针

2、成员。缺省的拷贝构造函数和赋值运算符函数是针成员。缺省的拷贝构造函数和赋值运算符函数是浅拷贝的方式,该方式经过浅拷贝的方式,该方式经过memcpy函数将源实例函数将源实例的数据复制给目的实例占住的一片内存空间。的数据复制给目的实例占住的一片内存空间。 对于这样的类,缺省的浅拷贝方式是平安的。对于这样的类,缺省的浅拷贝方式是平安的。 另一种方式的类含有指针成员,浅拷贝不再胜另一种方式的类含有指针成员,浅拷贝不再胜任这样的类。任这样的类。 C/C+程序设计程序设计思索如下阐明:思索如下阐明: 从上可见对于存在指针成员的类,系统提供的浅拷贝导从上可见对于存在指针成员的类,系统提供的浅拷贝导致指针指向

3、的内存为两个对象共享的格局。致指针指向的内存为两个对象共享的格局。一个一个CDeep类的声明和对象定义类的声明和对象定义 a.n a.p a.p=new inta.n b.n b.p b.p=new intb.n?=new intb.na.n a.pa.p=new inta.nb.n b.p 对象对象a,b的内存和指针成员动态扩展的内存空间的内存和指针成员动态扩展的内存空间b=a导致导致 b.p=a.p; b.n=a.n; 。指针。指针b.p指向指向a对象的动态内存。对象的动态内存。 class CDeep int n; int*p; a, b;中间深资源归口两个对象监控中间深资源归口两个对象

4、监控C/C+程序设计程序设计 浅拷贝的不良结果是:浅拷贝的不良结果是:b.p原先指向的堆空间悬空原先指向的堆空间悬空-既既无法索引也不能收回这片内存,无法索引也不能收回这片内存,a或或b对象的析构函数诱发中对象的析构函数诱发中间共享的深资源的流失。间共享的深资源的流失。 对于凡是具有指针成员的类,应细致提交两个函数:对于凡是具有指针成员的类,应细致提交两个函数: 一一.是拷贝构造函数,是拷贝构造函数, 二二.是赋值运算符函数,以便进展指针成员的动态资源是赋值运算符函数,以便进展指针成员的动态资源的深拷贝。的深拷贝。深拷贝的中心思绪是:深拷贝的中心思绪是: 1. 目的对象与源对象内存空间独立,相

5、应指针成员指目的对象与源对象内存空间独立,相应指针成员指向的内存空间也彼此独立。向的内存空间也彼此独立。 2. 全部拷贝源对象的数据到目的对象,包括分别拷贝全部拷贝源对象的数据到目的对象,包括分别拷贝指针成员指向的内存数据。指针成员指向的内存数据。 C/C+程序设计程序设计例例 深拷贝方式去掉定制的拷贝构造函数和赋值运算符函深拷贝方式去掉定制的拷贝构造函数和赋值运算符函数那么变成缺省的浅拷贝数那么变成缺省的浅拷贝 #include #include class CDeep public: int n; int *p; CDeep (int) ; CDeep (); CDeep (const C

6、Deep& r) ; CDeep& operator= (const CDeep& r); ; C/C+程序设计程序设计CDeep:CDeep() static int s_num=1; printf (%d.CDeep ()t, s_num+); delete p; CDeep:CDeep (int k) n=k; p=new int n; CDeep& CDeep:operator= (const CDeep& r) if (n!=r.n) delete p; n=r.n; p=new int n; memcpy (p, r.p, n*sizeof

7、(int); return *this; C/C+程序设计程序设计 CDeep:CDeep (const CDeep& r) n=r.n; p=new int n; memcpy (p, r.p, n*sizeof (int); void main () CDeep a (2), d(3); a.p0=1; d.p0=666; CDeep b (d); a.p 0=88; b=a; printf (%d;,b.p0); printf (%d; ,d.p0); printf (b fade out away;t); printf (%d; ,a.p0); C/C+程序设计程序设计程序输出

8、程序输出: 88;1.CDeep() 666;b fade out away; 88; 2.CDeep() 3.CDeep() 删除上面的拷贝构造函数和等号赋值运算符函数时,程删除上面的拷贝构造函数和等号赋值运算符函数时,程序运转输出序运转输出: 88;1.CDeep() 666;b fade out away; -572662307;2.CDeep() 3.CDeep() 之后弹出一个之后弹出一个Debug Assertion Failed!的警告对话框。的警告对话框。 缘由在于缘由在于b对象退出作用范围后导致析构函数的调用,对象退出作用范围后导致析构函数的调用, 析析构函数释放原来由构函数

9、释放原来由a对象拥有的深部堆中资源,其后对该内对象拥有的深部堆中资源,其后对该内存空间的操作存空间的操作 a.d0就等于在没有定义的内存空间进展寻址就等于在没有定义的内存空间进展寻址访问,因此是运转时的错误。访问,因此是运转时的错误。C/C+程序设计程序设计二、只读成员函数二、只读成员函数volatilevolatile, mutablemutable关键字关键字 1. 1. 只读成员函数只读成员函数 未经未经constconst或或volatilevolatile限制的对象或成员函数限制的对象或成员函数是普通的是普通的对象或普通的成员函数,依称为对象或成员对象或普通的成员函数,依称为对象或成

10、员函数。函数。 只读对象是关键字只读对象是关键字constconst限定的对象。只读限定的对象。只读成员函数是成员函数是constconst置于成员函数右圆括号之后修饰的成员函置于成员函数右圆括号之后修饰的成员函数,该成员数,该成员函数不修正成员变量的数据形状,即成员函函数不修正成员变量的数据形状,即成员函数体中出现的数数体中出现的数据成员仅作为右值。据成员仅作为右值。 没有只读的构造函数和析构函数,只读没有只读的构造函数和析构函数,只读对象和对象都调对象和对象都调用同一构造函数和析构函数。用同一构造函数和析构函数。 C/C+程序设计程序设计 const用于称号细分,成员函数声明和定义都必需紧

11、跟用于称号细分,成员函数声明和定义都必需紧跟const关键字。关键字。 只读成员函数的声明和定义格式为:其中只读成员函数的声明和定义格式为:其中type,t1, t2,tn是曾经声明的类型是曾经声明的类型 type f (t1 v1, t2 v2, .,tn vn) const; type CType: f(t1 v1, t2 v2, .,tn vn) const ; .; 成员函数可存在两个重载版本:成员函数可存在两个重载版本: 一个只读版本另一个普通版本。一个只读版本另一个普通版本。 当两种版本并存时,对象优先调用普通的成员函数,只当两种版本并存时,对象优先调用普通的成员函数,只读对象或只

12、读的对象援用仅仅调用只读成员函数。读对象或只读的对象援用仅仅调用只读成员函数。C/C+程序设计程序设计 对象可调用只读成员函数。关键字对象可调用只读成员函数。关键字const本质上约束本质上约束this形参为只读属性。形参为只读属性。 只读指针形参可以匹配左值区的地址,普通指针形参不只读指针形参可以匹配左值区的地址,普通指针形参不指向右值区的地址。指向右值区的地址。 只读对象的地址是右值区的地址。只读对象的地址是右值区的地址。 只读对象和只读成员函数不调用普通成员函数。普通的只读对象和只读成员函数不调用普通成员函数。普通的成员函数可调用只读成员函数。成员函数可调用只读成员函数。 只读成员函数是

13、只读取对象的数据形状的成员函数。只读成员函数是只读取对象的数据形状的成员函数。C/C+程序设计程序设计例例 const对象与只读成员函数。对象与只读成员函数。 #include struct CPoint long x; long y; ; class CRectpublic: CRect (int l, int t, int r, int b) ;CPoint& TopLeft () ; const CPoint& TopLeft () const ; private: long left; long top; long right; long bottom;inline C

14、Rect:CRect (int l, int t, int r, int b) left = l; top = t; right = r; bottom = b; C/C+程序设计程序设计 inline CPoint& CRect:TopLeft() return *(CPoint*)this); inline const CPoint& CRect:TopLeft () const return *(CPoint*)this); void main() CRect r (10,20,30,40); CPoint& rtl = r.TopLeft (); const C

15、Rect d (rtl.x+5, rtl.y+5, 35, 45); CPoint dtl (d.TopLeft(); printf (left=%d, top=%dt, rtl.x, rtl.y); printf (left=%d, top=%dn, dtl.x, dtl.y); /输出输出:left=10,top=20 left=15,top=25C/C+程序设计程序设计 成员函数成员函数TopLeft存在只读的和非只读的版本,其中的存在只读的和非只读的版本,其中的语句是一样的。语句是一样的。 前往援用的函数可以作为左值,本来只读成员函数不改前往援用的函数可以作为左值,本来只读成员函数不改

16、变对象的数据形状,假设不在前往类型上加变对象的数据形状,假设不在前往类型上加const限制将导限制将导致对象外部调用对数据的改动。致对象外部调用对数据的改动。 于是前往援用的只读成员函数在前往类型上由于是前往援用的只读成员函数在前往类型上由const前前置限制。置限制。 d.TopLeft ()为只读对象为只读对象d调用只读成员函数。调用只读成员函数。 r.TopLeft ()为对象为对象r调用普通的成员函数。调用普通的成员函数。 C/C+程序设计程序设计2. volatile关键字关键字 volatile关键字表示内存数据的变卦。关键字表示内存数据的变卦。 volatile关键字和关键字和c

17、onst关键字的语法是一致的。关键字的语法是一致的。 const修饰的变量维持恒定或函数不改动相关成员的数修饰的变量维持恒定或函数不改动相关成员的数据形状。据形状。 与与const相反,相反,volatile关键字限定的对象或成员函数关键字限定的对象或成员函数可以有效的变动。可以有效的变动。 这种变动可以来自其它的外部进程。这种变动可以来自其它的外部进程。C/C+程序设计程序设计例例 volatile关键字的用法关键字的用法 #include class B volatile int m_n; public: B (int v=1) m_n=v; void Set (int n) volati

18、le m_n=n; void Show () const printf (Show()const; n=%dn,m_n); void Show() volatile printf (Show() volatile; n=%dn,m_n); void Show() printf (Show() ;n=%dn,m_n); ;C/C+程序设计程序设计void main() const B c; c.Show(); volatile B v(2); v.Show();v.Set(3); v.Show(); B x(4); x.Show();/*程序输出结果:程序输出结果: */*Show() cons

19、t; n=1 */*Show() volatile; n=2*/*Show() volatile; n=3 */*Show() ; n=4 */C/C+程序设计程序设计 volatile对象操作对象操作volatile成员函数成员函数, const对象操作对象操作 const 成员函数。无妨以为成员函数。无妨以为volatile关键字和关键字和const关键字是关键字是一对含意相反的语法修饰词,它们常称为一对含意相反的语法修饰词,它们常称为c-v限定词。限定词。 对象既可操作对象既可操作const成员函数也可操作成员函数也可操作volatile成员函成员函数,假设这两个成员函数都存在但不存在普

20、通的版本那么导数,假设这两个成员函数都存在但不存在普通的版本那么导致致调用的歧义。调用的歧义。 volatile关键字运用的场所在普通程序中不关键字运用的场所在普通程序中不多,主要用在系统的程序设计中。多,主要用在系统的程序设计中。 volatile关键字可以和关键字可以和const同时出现。如下:同时出现。如下: volatile const int g_n=1;这表示程序不能改动变量这表示程序不能改动变量g_n的值,但允许系统改动它。的值,但允许系统改动它。C/C+程序设计程序设计3. mutable关键字关键字 关键字关键字mutable可以部分松动可以部分松动const对象的不对象的不

21、变属性。变属性。 假设一个对象前加上假设一个对象前加上const关键字限制,那么关键字限制,那么这个对象所这个对象所有的成员就冻结为右值。有的成员就冻结为右值。 但有时候对于这种约束期望有所放松,此时只但有时候对于这种约束期望有所放松,此时只需在相关需在相关的成员前冠以的成员前冠以mutable修饰,通知编译器如此成员修饰,通知编译器如此成员不受不受const的制约。的制约。C/C+程序设计程序设计例例 mutable关键字注册绝对可变的成员关键字注册绝对可变的成员 #include class CType public: mutable long v; long n; ; void main

22、() const CType cobj=1,2; printf (cobj=%d,%d; t,cobj.v,cobj.n);cobj.v=8; printf (cobj=%d,%d;n,cobj.v,cobj.n);/cobj.n=2; error : l-value specifies const object /输出结果:输出结果:cobj=1,2; cobj=8,2;C/C+程序设计程序设计 上面的代码中上面的代码中v是一个绝对可变的成员。是一个绝对可变的成员。 n是一个相对可变的成员,是一个相对可变的成员,n受受const对象限制时而间接对象限制时而间接的成为右值表达式。的成为右值表达

23、式。 对于此题对于此题cobj是一个不变对象,因此是一个不变对象,因此cobj.n不能成为左不能成为左值,值,v由于有了由于有了mutable的特殊照顾,的特殊照顾,cobj.v那么构成左值表那么构成左值表达达式。式。 C/C+程序设计程序设计三、友元三、友元friendfriend friend friend声明的函数称为友元函数,声明的函数称为友元函数,friend friend 可用可用于声明一于声明一个类,这个类称为友元类。个类,这个类称为友元类。 友元函数细分为全局友元函数和成员友元友元函数细分为全局友元函数和成员友元函数。友元函函数。友元函数或友元类在所访问类或当前类中由数或友元类

24、在所访问类或当前类中由friendfriend声声明。格式为:明。格式为: class CN class CN private: friend T f (T1, CN&, Tn); private: friend T f (T1, CN&, Tn); friend type A:f (CN friend type A:f (CN* *,T2,Tn);,T2,Tn); protected: friend class B; protected: friend class B; friend void funct (T v, CN& r) . friend void func

25、t (T v, CN& r) . ; / ; /类型称号类型称号type,T, T1, T2, ,Tn, A, Btype,T, T1, T2, ,Tn, A, B在在运用点之前运用点之前应首先阐明应首先阐明C/C+程序设计程序设计 friend关键字无视关键字无视protected,private的制约,的制约,放置在类放置在类声明的任何地方是等效的。声明的任何地方是等效的。 友元可访问当前类的一切成员。友元类一切的友元可访问当前类的一切成员。友元类一切的成员函数成员函数都是友元函数。都是友元函数。 友元类或友元函数普统统过三个途径访问当前友元类或友元函数普统统过三个途径访问当前类一

26、切的类一切的成员,包括公共属性的维护属性的和私有属性的成成员,包括公共属性的维护属性的和私有属性的成员:员: a. 友元函数的入口形参具有当前类的类名。友元函数的入口形参具有当前类的类名。 b. 友元函数具有当前类的对象作为部分对象或友元函数具有当前类的对象作为部分对象或对象指针对象指针 作为部分指针。作为部分指针。 c. 友元类具有当前类的对象作为其嵌入成员对友元类具有当前类的对象作为其嵌入成员对象。象。 C/C+程序设计程序设计1. 友元函数友元函数 友元函数是一种定义在当前类外部的普通函数,友元函数是一种定义在当前类外部的普通函数,经过经过friend在当前类内部声明,但友元函数不是当前

27、类在当前类内部声明,但友元函数不是当前类的成员函的成员函数。数。 在当前类的友元函数获得如此特权:在当前类的友元函数获得如此特权: 定义在友元函数形参列表或函数体中的当前类定义在友元函数形参列表或函数体中的当前类对象、对对象、对象援用或对象指针等可以访问该类一切控制属性的象援用或对象指针等可以访问该类一切控制属性的成员包括成员包括私有成员,就好似当前类三个访问控制属性全部是私有成员,就好似当前类三个访问控制属性全部是公共的访公共的访问控制属性。问控制属性。C/C+程序设计程序设计 友元是一种解除访问控制约束的机制。友元是一种解除访问控制约束的机制。 此种废除访问控制约束的友元关系不传送不反身不

28、继此种废除访问控制约束的友元关系不传送不反身不继承,即假设类承,即假设类A是类是类B的友元的友元, 类类B是类是类C的友元,的友元,A不会自动不会自动称为类称为类C的友元;的友元; 类类A是类是类B的友元但不一定类的友元但不一定类B是类是类A的友元;的友元; 类类A是类是类B的友元的友元, 类类A的派生类的派生类D不会自动成为类不会自动成为类B的的友元。友元。 友元函数是某个类的特权函数,这个访问当前类一切成友元函数是某个类的特权函数,这个访问当前类一切成员的特权在该类中由员的特权在该类中由friend声明获得,未由声明获得,未由friend声明的函声明的函数操作当前类的公共成员。数操作当前类

29、的公共成员。C/C+程序设计程序设计例例 友元函数将类回归到经典的公共访问性质的构造友元函数将类回归到经典的公共访问性质的构造 #include struct S int e; class B; class A private: int a; public: void add(B& ); friend void swap(A*,B& ); int& Ea () return a; ; C/C+程序设计程序设计class B friend void swap (A *p,B& r); private: int b; friend void A:add (B&

30、; r); public: int& Eb () return b; ; void PublicB (S *p,B& r) r.Eb()=1; /p-e=r.b; /error b : cannot access private member C/C+程序设计程序设计void swap (A *p,B& r) int t=p-a; p-a=r.b; r.b=t; void A:add (B& r) a+=r.b; void main () A x; x.Ea ()=1; B y; y.Eb ()=2; x.add (y); swap (&x,y); pr

31、intf (%d, %dn, x.Ea(), y.Eb(); /输出输出2,3C/C+程序设计程序设计阐明:类阐明:类B的友元函数的声明格式为的友元函数的声明格式为: class B friend void swap(A *p,B& r); /全局函数全局函数swap是是B类和类和A类的的友元函数类的的友元函数 friend void A: add(B& r); ; /A类的成员函数类的成员函数add是是B类的友元函数类的友元函数 其中值得关注的是当前类的类名其中值得关注的是当前类的类名B出如今友元函数的形出如今友元函数的形参类型中,形参参类型中,形参r可经过圆点运算符访问可经

32、过圆点运算符访问B类中的任一成员。类中的任一成员。 同理全局函数同理全局函数swap (A *p,B& r)是类是类A的友元函数,这的友元函数,这个函数的个函数的A*型形参型形参p可以经过箭头运算符可以经过箭头运算符-访问访问A类的一切类的一切成员包括私有成员。成员包括私有成员。C/C+程序设计程序设计 友元函数或友元类由友元函数或友元类由friend声明,但友元函数或友元类声明,但友元函数或友元类在当前类外的定义不运用关键字在当前类外的定义不运用关键字friend。 友元函数的定义应位于当前类的描画之后,以便编译器友元函数的定义应位于当前类的描画之后,以便编译器必需有足够的信息操作当

33、前的成员。必需有足够的信息操作当前的成员。 友元函数的调用维持原来的格式,即全局友元函数按照友元函数的调用维持原来的格式,即全局友元函数按照全局函数的真假结合匹配,成员友元函数那么根据本身类的全局函数的真假结合匹配,成员友元函数那么根据本身类的对对象外部调用或本身类的象外部调用或本身类的this指针内部调用。指针内部调用。 另一个全局函数另一个全局函数PublicB (S *p,B& r)由于不是类由于不是类B的友的友元函数,元函数,B&型的援用形参型的援用形参r只能访问公共的成员,妨碍了数只能访问公共的成员,妨碍了数据的流通。据的流通。 为处理这种景象可以声明这个全局函数为为

34、处理这种景象可以声明这个全局函数为B类的友元函类的友元函数,通知编译器跳过成员属性访问控制检查的机制,抹平精数,通知编译器跳过成员属性访问控制检查的机制,抹平精细封装的界限。或者将细封装的界限。或者将B类的数据处置为公共的属性。类的数据处置为公共的属性。C/C+程序设计程序设计2. 友元类友元类 前面阐明了友元函数在某一个类中的特权地前面阐明了友元函数在某一个类中的特权地位,在友元函数中当前类不过是一个毫不设防的公位,在友元函数中当前类不过是一个毫不设防的公共世界,关键字共世界,关键字protected和和private形如虚设。形如虚设。 一个类可以声明另一个类为其友元,由此构成一个类可以声

35、明另一个类为其友元,由此构成友元类。友元类。 友元类中的一切成员函数可以访问当前类一切友元类中的一切成员函数可以访问当前类一切的成员。的成员。 C/C+程序设计程序设计例例 友元类友元类B将当前类将当前类A视为一个公共访问控制属性的构造视为一个公共访问控制属性的构造 #include class B; class A friend class B; private: int m_a; A (int k=0) m_a=k; public: friend void g_f(); void Show() printf (m_a=%dt, m_a); ;C/C+程序设计程序设计 class B int

36、 m_b; A a; public:B (int k=1) m_b=k; a.m_a=1+k; A& Add(A* ); A& B:Add (A* p) p-m_a+= a.m_a+m_b; return *p; A* pa; void g_f () A a; a.m_a=1; a.Show(); static A d(100); pa=&d; void main() g_f (); B b; b.Add (pa).Show (); /输出:输出:m_a=1,m_a=103C/C+程序设计程序设计阐明:阐明: 嵌入对象成员嵌入对象成员a的行为由于类的行为由于类B是类是类

37、A的友元类而好似类的友元类而好似类A回归到传统的公共的构造,访问控制属性这些与处理详细回归到传统的公共的构造,访问控制属性这些与处理详细问题无关的桎梏消逝不起作用。问题无关的桎梏消逝不起作用。 全局函数全局函数g_f()是类是类A的友元函数,在这个友元函数里调的友元函数,在这个友元函数里调用私有的构造函数,完成对象的定义。用私有的构造函数,完成对象的定义。 经过一个全局指针经过一个全局指针pa与静态部分对象与静态部分对象d的关联完成数据的关联完成数据封装与共享。封装与共享。C/C+程序设计程序设计C/C+程序设计程序设计)v%s#pXlUiQfNcK8H5E2A+x(u$rZnWkThPeMb

38、J7G4C1zs#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfO8H5D2A+x*u$rZnWkShPeMaJ7G4

39、C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v&s#pXlU

40、iRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t

41、$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$

42、rZnWkThPeMaJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C

43、0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNb

44、K8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5Ew*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXl

45、UiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlTiQeNbJ8G5D1A-x*

46、t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E

47、3B0y(v%r#oThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLa

48、I7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2At!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论