1、小测验 Const是什么?请举一例说明?内联函数是什么?有什么作用?什么是函数重载?请举出一例说明?什么是引用?请举一例说明?第10章 类和对象 1 类的构成 2 成员函数的定义 3 对象的定义和使用 4 构造函数与析构函数 5 自引用指针this 6 对象数组 1 类的构成 1.1 从结构体到类 1.2 类的构成本节主要内容1.1 1.1 从结构体到类 1.结构体的扩充 例如下面声明了一个日期结构体:struct Date int year;/年 int month;/月 int day;/日 ;C语言结构体一般格式如下:struct 结构名 数据;例例 有关日期结构体的例子。有关日期结构体
2、的例子。#include#includeusing namespace std;using namespace std;struct Date /struct Date /声明了一个名为声明了一个名为DateDate的结构体的结构体 int year;int year;int month;int month;int day;int day;int main()int main()Date date1;Date date1;date1.year=2010;/date1.year=2010;/可以在结构体外直接访问数据可以在结构体外直接访问数据yearyear date1.month=8;/dat
3、e1.month=8;/可以在结构体外直接访问数据可以在结构体外直接访问数据monthmonth date1.day=25;/date1.day=25;/可以在结构体外直接访问数据可以在结构体外直接访问数据dayday coutdate1.year.date1.month.coutdate1.year.date1.month.date1.dayendl;date1.dayendl;return 0;return 0;程序的运行结果如下程序的运行结果如下:2010.8.252010.8.25 C语言中的结构体缺点:结构体变语言中的结构体缺点:结构体变量可以在结构体外直接访问数据量可以在结构体外直
4、接访问数据,在在C结构体中的数据是很不安全的结构体中的数据是很不安全的。C+C+中引入了中引入了类的概念类的概念,克克服了服了C C结构体的缺点。结构体的缺点。C+中引入了类的概念,它不仅可以含有数据,而且还可以含有函数。类中的数据和函数,分别称作数据成员和成员函数。类声明的简化格式如下类声明的简化格式如下:class class 类名类名 数据数据 函数函数;类的声明由关键字类的声明由关键字classclass打头打头,后跟后跟类名类名花括号中是花括号中是类体类体以一个分号以一个分号“;”“;”结束结束类声明的简化格式如下类声明的简化格式如下:class class 类名类名 数据数据成员成
5、员 函数函数函数函数;1.2 类的构成 在类中,数据成员和成员函数分别属于private部分、和public部分。数据成员和成员函数一般也统称为类的成员。类声明的一般格式如下:class class 类名类名 public:public:公有数据成员公有数据成员;公有成员函数公有成员函数;private:private:私有数据成员私有数据成员;私有成员函数私有成员函数;公有成员公有成员既可被类内的成既可被类内的成员函数访问员函数访问,也可被类的外部也可被类的外部访问访问,是类与外界的接口。是类与外界的接口。私有成员私有成员只能被类内只能被类内的成员函数访问的成员函数访问,而类外而类外部的任何
6、访问都是非法的。部的任何访问都是非法的。用一个类Date来描述日期,其形式如下:class Dateclass Date public:public:void setDate(int y,int m,int d);/void setDate(int y,int m,int d);/公有成员函数公有成员函数 void showDate();/void showDate();/公有成员函数公有成员函数 private:private:int year;/int year;/私有数据成员私有数据成员 int month;/int month;/私有数据成员私有数据成员 int day;/int da
7、y;/私有数据成员私有数据成员;私有数据成员私有数据成员yearyear、monthmonth和和dayday只只能由内部成员函数访能由内部成员函数访问问,在类的外部无法在类的外部无法访问访问,保护了私有数保护了私有数据的安全据的安全。设置日期成员设置日期成员函数函数setDatesetDate和日期和日期显示成员函数显示成员函数showDateshowDate都是公有都是公有的成员函数的成员函数,类外部类外部对类对类DateDate的数据进的数据进行操作行操作,只能通过这只能通过这两个函数来实现。两个函数来实现。说明:(1)除了private和public之外,类中的成员还可以用另一个关键字
8、 protected来说明。被protected说明的数据成员和成员函数称为保护成员。类声明的完整格式如下:class class 类名类名 public:public:公有数据成员公有数据成员;公有成员函数公有成员函数;protected:protected:保护数据成员保护数据成员;保护成员函数保护成员函数;private:private:私有数据成员私有数据成员;私有成员函数私有成员函数;保护成员保护成员可以由本类的成员函数访可以由本类的成员函数访问问,也可以由本类的派生类的成员函也可以由本类的派生类的成员函数访问数访问,而类外的任何访问都是非法而类外的任何访问都是非法的的,将在第将在第
9、1313章详细介绍。章详细介绍。(2)对一个具体的类来讲,类声明格式中的3个部分并非一定要全有,但至少要有其中的一个部分。一般情况下,一个类的数据成员应该声明为私有成员,成员函数声明为公有成员。这样,内部的数据整个隐蔽在类中,在类的外部根本就无法看到,使数据得到有效的保护。(3)类声明中的private、protected和public三个关键字可以按任意顺序出现任意次。但是,如果把所有的私有成员、保护成员和公有成员归类放在一起,程序将更加清晰。(4)C+规定,在默认情况下(即没有指定成员是私有、保护或公有时),类中的成员是私有的。例例 将结构体将结构体structstruct改为类改为类cl
10、assclass。#include#includeusing namespace std;using namespace std;class Dateclass Date /将结构体将结构体structstruct改为类改为类classclass int year;/int year;/私有数据成员私有数据成员 int month;/int month;/私有数据成员私有数据成员 int day;/int day;/私有数据成员私有数据成员;int main()int main()Date date1;Date date1;date1.year=2010;/date1.year=2010;/错
11、误错误,在类外不能访问私有数据成员在类外不能访问私有数据成员yearyeardate1.month=8;/date1.month=8;/错误错误,在类外不能访问私有数据成员在类外不能访问私有数据成员monthmonthdate1.day=25;/date1.day=25;/错误错误,在类外不能访问私有数据成员在类外不能访问私有数据成员day day coutdate1.year.date1.month.“coutdate1.year.date1.month.“date1.dayendl;/date1.dayendl;/错误错误,不能访问私有数据成员不能访问私有数据成员 return 0;ret
12、urn 0;私有成员私有成员只能被类只能被类内的成员函数访问内的成员函数访问,而类外部的任何访而类外部的任何访问都是非法的。问都是非法的。如何才能访问类中的私有数据成员呢?将如何才能访问类中的私有数据成员呢?将后面作详细的介绍。后面作详细的介绍。#include /#include /有关日期结构体的例子。有关日期结构体的例子。using namespace std;using namespace std;struct Date/struct Date/声明了一个名为声明了一个名为DateDate的结构体的结构体 int year;/int year;/公有的公有的数据成员数据成员 int m
13、onth;/int month;/公有的公有的数据成员数据成员 int day;/int day;/公有的公有的数据成员数据成员int main()int main()Date date1;Date date1;date1.year=2010;/date1.year=2010;/可以可以在结构体外直接访问数据在结构体外直接访问数据yearyear date1.month=8;/date1.month=8;/可以可以在结构体外直接访问数据在结构体外直接访问数据monthmonth date1.day=25;/date1.day=25;/可以可以在结构体外直接访问数据在结构体外直接访问数据dayd
14、ay coutdate1.year.date1.month.coutdate1.year.date1.month.date1.dayendl;date1.dayendl;return 0;return 0;程序的运行结果如下程序的运行结果如下:208.25208.25 在默认情况下在默认情况下,结构体中的成员是结构体中的成员是公有的公有的。因此。因此,数据数据成员成员yearyear、monthmonth和和dayday默认为是公有的默认为是公有的,结构体外的变量结构体外的变量date1date1能够对它们直接进行访问能够对它们直接进行访问(5)不能在类声明中给数据成员赋初值。例如:class
15、 abc private:char a=q;/错误 int b=33;/错误 public:;C+规定,只有在对象定义之后才能给数据成员赋初值 2 成员函数的定义 2.1 普通成员函数的定义2.2 内联成员函数的定义本节主要内容2.1 普通成员函数的定义 将成员函数以普通成员函数(即非内联的成员函数)的形式进行定义。在类声明中只给出成员函数的原型,而将成员函数的定义放在类外部。例如:Student成员函数名(参数表)成员函数成员函数在类外在类外定义的一般形式是:定义的一般形式是:返回值类型返回值类型 类名类名 成员函数名成员函数名(参数表参数表)函数体函数体 在在类名类名和和成员成员函数名函数
16、名之之间应加上作用域运算符间应加上作用域运算符“”class Student /学生类的定义-1private:int number;float score;public:void input(int number1,float score1);/函数原型1,输入成绩 void modify(float score1);/函数原型2,修改成绩 void print();/函数原型3,打印成绩;void Student:input(int number1,float score1)/函数定义1 number=number1;score=score1;void Student:modify(flo
17、at score1)/函数定义2 score=score1;void Student:print()/函数定义3 coutnnumber:number score:score;在在类声明中类声明中只给出成员函数只给出成员函数的原型,而将的原型,而将成员函数的定义放成员函数的定义放在类外部在类外部。在函数名前应加上类名和作用域运算符“”说明:(1)在类声明中,成员函数原型的参数表中可以不说明参数的名字,而只说明它们的类型。例如:void modify(float score1);void modify(float score1);但是,在类外定义成员函数时,不但要说明参数表中参数的类型,还必须要
18、指出其参数名。例如:void Student:modify(float void Student:modify(float score1score1)score=score1;score=score1;(2)采用“在类声明中只给出成员函数的原型,而将成员函数的定义放在类的外部”的定义方式,是C+程序设计的良好习惯。2.2 内联成员函数的定义 (1)隐式声明 将成员函数直接定义在类的内部。例如:class Studentclass Student /学生类的定义学生类的定义-2-2 private:private:int number;int number;float score;float s
19、core;public:public:void input(int number1,float score1)void input(int number1,float score1)/定义定义成员成员函数函数 number=number1;number=number1;score=score1;score=score1;void modify(float score1)/void modify(float score1)/定义定义成员成员函数函数 score=score1;score=score1;void print()void print()/定义成员函数定义成员函数 coutnnumbe
20、r:number score:score;coutnnumber:number score:score;将成员函数直接将成员函数直接定义在类内部,编译定义在类内部,编译时是作为内联函数的时是作为内联函数的方式来处理方式来处理(内联函内联函数数隐式定义隐式定义)(2)(2)显式声明显式声明 在类声明中只给出成员函数的原型,而成员函数的定义放在类外部。但在类外部成员函数的定义前冠以关键字“inline”,使它起到内联函数的作用。class Studentclass Student private:private:int number;int number;float score;float sco
21、re;public:public:void input(int number1,float score1);void input(int number1,float score1);.;inlineinline void Student:input(int number1,float score1)void Student:input(int number1,float score1)number=number1;score=score1;number=number1;score=score1;成员函数的原型成员函数的原型冠以关键字冠以关键字“inlineinline”使用 inline定义内
22、联函数时,可以在声明函数原型和定义函数时同时写inline,也可以在其中一处声明inline,效果是相同的,都能按内联函数处理。但是,必须将类的声明和内联成员函数的定义都放在同一个文件(或同一个头文件)中,否则编译时无法进行代码置换。class Student /学生类的定义学生类的定义-3-3 private:int number;float score;public:inline void input(int number1,float score1);/函数原型函数原型1 1 inline void modify(float score1);/函数原型函数原型2 2 inline voi
23、d print();/函数原型函数原型3 3;inline void Student:input(int number1,float score1)number=number1;/函数定义函数定义1 1 score=score1;inline void Student:modify(float score1)score=score1;/函数定义函数定义2 2 inline void Student:print()/函数定义函数定义3 3 coutnnumber:number score:score;冠以关键字冠以关键字“inlineinline”3 对象的定义和使用 3.1 类与对象的关系 3
24、.2.对象的定义 3.3 对象中成员的访问 3.4 类的作用域和类成员的访问属性 本节主要内容3.1 类与对象的关系 在C+中,类与对象间的关系,可以用数据类型int和整型变量i之间的关系来类比。类类型和int类型均代表的是一般的概念,而对象和整型变量却是代表具体的东西。数据类型 实 例 int a,b(变量)学生类 张三,李四(对象)水果类 苹果,桔子(对象)3.2.对象的定义 定义对象可以用以下两种方法:方法 1:在声明类的同时,直接定义对象,即在声明类的右花括号“”后,直接写出属于该类的对象名表。例如:class Student /.stu1,stu2;在声明类在声明类Student S
25、tudent 的同的同时,直接定义对象时,直接定义对象stu1stu1和和stu2stu2 方法 2:声明了类之后,在使用时再定义对象。其一般形式如下:class Student /;Student stu1,stu2;在在使用时使用时再定义对象再定义对象,此时定义了类此时定义了类StudentStudent的的两个对象两个对象stu1stu1和和stu2stu2说明:说明:声明了一个类便声明了一声明了一个类便声明了一种类型,这时没有给它分配存种类型,这时没有给它分配存储空间,储空间,只有定义了对象后,只有定义了对象后,系统才为对象分配存储空间系统才为对象分配存储空间。类名 对象名1,对象名2
26、,;3.3 对象中成员的访问 不论是数据成员,还是成员函数,只要是公有的,在类的外部可以通过类的对象进行访问。访问对象中的成员通常有以下三种方法。(1)通过对象名和对象选择符访问对象中的成员 其一般形式是:其中“”叫做对象选择符,简称点运算符。对象名对象名数据成员名数据成员名 或或 对象名对象名成员函数名成员函数名(实参表实参表)#include/#include/学生类的完整程序学生类的完整程序using namespace std;using namespace std;class Studentclass Student private:private:int number;int nu
27、mber;float score;float score;public:public:void input(int number1,float score1);void input(int number1,float score1);/输入学生成绩输入学生成绩 void modify(float score1);void modify(float score1);/修改学生成绩修改学生成绩 void print();void print();/打印学生成绩打印学生成绩;void void Student:Student:input(int number1,float score1)input(
28、int number1,float score1)number=number1;score=score1;number=number1;score=score1;void void Student:Student:modify(float score1)score=score1;modify(float score1)score=score1;void void Student:Student:print()print()coutnnumber:numberscore:score;coutnnumber:numberscore:score;int main()int main()Student
29、 stu1,stu2;Student stu1,stu2;stu1.input(9901,95);stu1.input(9901,95);stu2.input(9902,75);stu2.input(9902,75);stu1.print();stu2.print();stu1.print();stu2.print();stu1.modify(85.5);stu1.modify(85.5);stu1.print();stu2.print();stu1.print();stu2.print();return 0;return 0;stu1.number=9901,stu1.score=95stu
30、1.number=9901,stu1.score=95stu2.number=9902,stu2.score=75stu2.number=9902,stu2.score=75 stu1.score=85.5 stu1.score=85.5 运行结果运行结果:number:9901 score:95 number:9901 score:95 number:9902 score:75 number:9902 score:75 number:9901 score:85.5 number:9901 score:85.5 number:9902 score:75 number:9902 score:75
31、#include/#include/通过对象名和对象选择符访问对象中的成员。通过对象名和对象选择符访问对象中的成员。using namespace std;using namespace std;class Dateclass Date public:public:void setDate(int y,int m,int d);void setDate(int y,int m,int d);void showDate();void showDate();private:private:int year;int month;int day;int year;int month;int day;v
32、oid void Date:Date:setDate(int y,int m,int d)year=y;month=m;day=d;setDate(int y,int m,int d)year=y;month=m;day=d;void void Date:Date:showDate()coutyear.month.dayendl;showDate()coutyear.month.dayendl;int main()int main()Date Date date1date1;coutDate1 set and output:endl;coutDate1 set and output:endl;
33、date1.date1.setDate(2010,4,28);setDate(2010,4,28);date1.date1.showDate();showDate();return 0;return 0;调用对象调用对象date1date1的公有成员的公有成员函数函数setDate,setDate,给给date1date1的私的私有数据成员赋值有数据成员赋值调用对象调用对象date1date1公有成员函数公有成员函数showDate,showDate,显示显示date1date1的私有数据成员的私有数据成员程序运行结果如下程序运行结果如下:Date1 set and output:Date1
34、set and output:2010.4.282010.4.28说明说明:在类外只能访问公有(public)成员,而不能访问私有(private)成员。如果将主程序改成下面的形式,将出现编译错误:int main()int main()Date date1;Date date1;date1date1.year=2010;.year=2010;date1date1.month=8;.month=8;date1 date1.day=25;.day=25;coutcoutdate1date1.year.year.date1date1.month.month.date1date1.day.dayen
35、dl;”“-”操作符操作符。例如例如:class Date class Date public:public:int year;int year;Date d,Date d,*ptr;ptr;/定义对象定义对象d d和指向类和指向类DateDate的指针变量的指针变量ptrptr ptr=&d;/ptr=&d;/使使ptrptr指向对象指向对象d d cout coutyearptr-year;/;/输出输出ptrptr指向对象中的成员指向对象中的成员yearyear d.yeard.year(*ptr).year ptr).year 三者是等价的三者是等价的 ptr-year ptr-yea
36、r (3)(3)通过对象的引用访问对象中的成员通过对象的引用访问对象中的成员 如果为一个对象定义了一个引用,也就是为这个对象起了一个别名。例如:class Date public:int year;.;Date d1;/定义类Date的对象d1Date&d2=d1;/定义类Date的引用d2,/并用对象d1进行初始化coutd1.year;/输出对象d1中的数据成员yearcoutd2.year;/输出对象d2中的数据成员year 由于由于d2d2是是d1d1的引用(即的引用(即d2d2和和d1d1占有相同的存储单元)占有相同的存储单元),因此因此d2.yeard2.year和和d1.year
37、d1.year是相同的。是相同的。3.4 类的作用域和类成员的访问属性 所谓类的作用域就是指在类的声明中的一对花括号所形成的作用域。一个类的所有成员都在该类的作用域内。在类的作用域内,一个类的任何成员函数成员可以不受限制地访问该类中的其他成员。而在类作用域之外,对该类的数据成员和成员函数的访问则要受到一定的限制,有时甚至是不允许的。这主要与类成员的访问属性有关。类成员有二种访问属性:公有属性和私有属性。说明为公有的成员不但可以被类中成员函数访问,还可在类的外部,通过类的对象进行访问。说明为私有的成员只能被类中成员函数访问,不能在类的外部,通过类的对象进行访问。换一种说法:类内部的成员函数可以访
38、问类的所有成员,没有任何限制,类外部的对象可以访问类的公有成员,不能访问类的私有成员。class Sampleclass Sample private:private:int i;int i;/私有成员私有成员 public:public:int j;int j;/公有成员公有成员 void set(int i1,int j1)void set(int i1,int j1)/公有成员公有成员 i=i1;/i=i1;/类的成员函数可以访问类的私有成员类的成员函数可以访问类的私有成员i i j=j1;/j=j1;/类的成员函数可以访问类的公有成员类的成员函数可以访问类的公有成员j j;int ma
39、in()int main()Sample a;/Sample a;/定义类定义类SampleSample的对象的对象a a a.set(3,5);a.set(3,5);cout couta.ia.iendl;endl;cout couta.ja.jendl;return 0;endl;return 0;非法非法,类类SampleSample的对象的对象a a不能访问类的不能访问类的私有成员私有成员i i 在类外在类外,类类SampleSample的对象的对象a a可可以访问以访问公有成员函数公有成员函数set()set()合法合法,类类SampleSample的对象的对象a a能能够访问类的够
40、访问类的公有成员公有成员j j分析以下程序段 一般而言一般而言,公有成员是类的对外公有成员是类的对外接口接口,而私有成员是类的内部数据而私有成员是类的内部数据和内部实现和内部实现,不希望外界访问。不希望外界访问。4 构造函数与析构函数 4.1 对象的初始化和构造函数 4.2 用成员初始化表对数据成员初始化 4.3 析构函数 4.4 默认的构造函数和默认的析构函数 4.5 带默认参数的构造函数 本节主要内容4.1 对象的初始化和构造函数 与使用变量一样,对象时也应该“先定义,后使用”。在定义对象时,对数据成员赋初值,称为对象的初始化。C+规定,类声明体中不能给数据成员直接赋初值,下面的写法是错误
41、的:class Date private:int year=2010;/错误 int month=6;/错误 int day=16;/错误 ;对象的初始化常采用以下两种方法:1.调用普通的成员函数来完成 2.调用构造函数来完成class Dateclass Date public:public:void setDate(int y,int m,int d);void setDate(int y,int m,int d);void showDate();void showDate();private:private:int year;int month;int day;int year;int
42、month;int day;int main()int main()Date date1;Date date1;date1.setDate(2010,4,28);date1.setDate(2010,4,28);return 0;return 0;调用对象调用对象date1date1的公有的公有成员函数成员函数setDate,setDate,给给date1date1的私有数据成员赋初值的私有数据成员赋初值,初初始化后:始化后:Date1.year=2010 Date1.year=2010 Date1.month Date1.month=4=4 Date1.day Date1.day=28=28
43、1.用普通成员函数对对象进行初始化 在建立对象的时,采用构造函数给数据成员赋初值,通常有以下两种形式。形式形式1:1:类名类名 对象名对象名(实参表实参表););这里的“类名”与构造函数名相同,“实参表”是为构造函数提供的实际参数。2.用构造函数对对象进行初始化构造函数是一种特殊的成员函数,它主要用于:(1)为对象分配空间 (2)为对象的数据成员进行初始化 (3)其他指定的任务#include/#include/using namespace std;using namespace std;class Dateclass Date public:public:Date(int y,int m,
44、int d);/Date(int y,int m,int d);/声明构造函数声明构造函数DateDate的原型的原型 void showDate();void showDate();private:private:int year;int month;int day;int year;int month;int day;Date:Date(int y,int m,int d)/Date:Date(int y,int m,int d)/定义构造函数定义构造函数DateDateyear=y;month=m;day=d;year=y;month=m;day=d;inline void Date:s
45、howDate()inline void Date:showDate()coutyear.month.dayendl;coutyear.month.day”来访问对象的成员,而不是“.”。类名*指针变量名=new 类名(实参表);将主函数改成用这种方法来实现。int main()Date*pdate=new Date(2010,4,28);pdate-showDate();delete pdate;return 0;利用构造函数创建对象的另利用构造函数创建对象的另一种方法一种方法:用指针和用指针和newnew来实现来实现。说明:(1)构造函数的名字必须与类名相同,否则编译程序将把它当作一般的成
46、员函数来处理。(2)构造函数没有返回值,在声明和定义构造函数时,是不能说明它的类型的,甚至说明为void类型也不行。例如上述构造函数不能写成 void Date(int y,int m,int d);说明为void类型也不行 (3)与普通的成员函数一样,构造函数的函数体可写在类体内,也可写在类体外。如类Date可以声明如下:class Dateclass Date public:public:Date(int y,int m,int d)/Date(int y,int m,int d)/构造函数定义在类内构造函数定义在类内 year=y;month=m;day=d;year=y;month=m
47、;day=d;void showDate()void showDate()coutyear.month.dayendl;coutyear.month.dayendl;private:private:int year;int year;int month;int month;int day;int day;构造函数的函数体也构造函数的函数体也可可写在类体外写在类体外 (4)构造函数一般声明为公有成员,但它不需要也不能像其他成员函数那样被显式地调用,它是在定义对象的同时被自动调用的。例如,下面的用法是错误的:date1.Date(2010,4,28);(5)构造函数可以是不带参数的。例如:clas
48、s A private:int x;public:A()x=50;int main()A a;构造函数可以不带参数 定义类A的对象a时,调用不带参数的构造函数给数据成员x赋初值50 4.2 用成员初始化表对数据成员初始化 class Aclass A int i int i;float f float f;publicpublic:A(int i1 A(int i1,float f1)float f1)i=i1 i=i1;f=f1f=f1;;class Aclass A int i int i;float f float f;public public:A(int i1 A(int i1,fl
49、oatf1)floatf1):i(i1),f(f1):i(i1),f(f1);在构造函数中一般用赋值语句对数据成员的初始化进行 C+还提供另一种初始化数据成员的方法-用成员初始化列表来实现对数据成员的初始化。带有成员初始化列表的构造函数的一般形式如下:成员初始化列表的一般形式为:类名类名:构造函数名构造函数名(参数表参数表):(:(成员初始化列表成员初始化列表)构造函数体构造函数体 数据成员名数据成员名1(1(初始值初始值1),1),数据成员名数据成员名2(2(初始值初始值2),2),#include#include using namespace std;using namespace st
50、d;class Dateclass Date public:public:Date(int y,int m,int d);Date(int y,int m,int d);/声明构造函数的原型声明构造函数的原型 void showDate();void showDate();private:private:int year;int month;int day;int year;int month;int day;Date:Date(int y,int m,int d):Date:Date(int y,int m,int d):year(y),month(m),day(d)year(y),mont
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。