




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
20172017 年全国计算机二级年全国计算机二级 C+C+考试复习知识点汇总考试复习知识点汇总 一、一、C+C+概述概述 (一) 发展历史 1980 年, Bjarne Stroustrup 博士开始着手创建一种模拟语言,能够具有面 向对象的程序设计特色。在当时,面向对象编程还是一个比较新的理念,Strou strup 博士并不是从头开始设计新语言,而是在C 语言的基础上进行创建。这就 是 C+语言。 1985 年,C+开始在外面慢慢流行。经过多年的发展,C+已经有了多个版 本。为次,ANSI 和 ISO 的联合委员会于 1989 年着手为 C+制定标准。1994 年 2 月,该委员会出版了第一份非正式草案,1998 年正式推出了 C+的国际标准。 (二) C 和 C+ C+是 C 的超集,也可以说 C 是 C+的子集,因为 C 先出现。按常理说,C+ 编译器能够编译任何 C 程序,但是 C 和 C+还是有一些小差别。 例如 C+增加了 C 不具有的关键字。这些关键字能作为函数和变量的标识符 在 C 程序中使用,尽管 C+包含了所有的 C,但显然没有任何 C+编译器能编译 这样的 C 程序。 C 程序员可以省略函数原型,而 C+不可以,一个不带参数的 C 函数原型必 须把 void 写出来。而 C+可以使用空参数列表。 C+中 new 和 delete 是对内存分配的运算符, 取代了 C 中的 malloc 和 free。 标准 C+中的字符串类取代了 C 标准 C 函数库头文件中的字符数组处理函 数。 C+中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数 库。 C+中的 try/catch/throw 异常处理机制取代了标准 C 中的 setjmp()和 lon gjmp()函数。 二、关键字和变量二、关键字和变量 C+相对与 C 增加了一些关键字,如下: typename bool dynamic_cast mutable namespace static_cast using catch explicit new virtual operator false private template volatile const protected this wchar_t const_cast public throw friend true reinterpret_cast try bitor xor_e and_eq compl or_eq not_eq bitand 在 C+中还增加了 bool 型变量和 wchar_t 型变量: 布尔型变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在表达 式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值1 或 0。要把一 个整型变量转换成布尔型变量,如果整型值为 0,则其布尔型值为假;反之如果 整型值为非 0,则其布尔型值为真。布儿型变量在运行时通常用做标志,比如进 行逻辑测试以改变程序流程。 #include iostream.h int main() bool flag; flag=true; if(flag) cout return 0; C+中还包括 wchar_t 数据类型,wchar_t 也是字符类型,但是是那些宽度 超过 8 位的数据类型。许多外文字符集所含的数目超过 256 个,char 字符类型 无法完全囊括。wchar_t 数据类型一般为 16 位。 标准 C+的 iostream 类库中包括了可以支持宽字符的类和对象。用 wout 替 代 cout 即可。 #include iostream.h int main() wchar_t wc; wc=b; wout wc=y; wout wc=e; wout a; /*输入一个数值*/ cout a; cout 类的设计、构造函数和析构函数 一、类的设计 1.类的声明 class 类名 private: /私有 . public: /公有 . ; 2.类的成员 一般在 C+类中,所有定义的变量和函数都是类的成员。如果是变量,我们 就叫它数据成员如果是函数,我们就叫它成员函数。 3.类成员的可见性 private 和 public 访问控制符决定了成员的可见性。由一个访问控制符设 定的可访问状态将一直持续到下一个访问控制符出现,或者类声明的结束。私有 成员仅能被同一个类中的成员函数访问, 公有成员既可以被同一类中的成员函数 访问,也可以被其他已经实例化的类中函数访问。当然,这也有例外的情况,这 是以后要讨论的友元函数。 类中默认的数据类型是 private, 结构中的默认类型是 public。 一般情况下, 变量都作为私有成员出现,函数都作为公有成员出现。 类中还有一种访问控制符 protected,叫保护成员,以后再说明。 4.初始化 在声明一个类的对象时,可以用圆括号()包含一个初始化表。 看下面一个例子: #include iostream.h class Box private: int height,width,depth; /3 个私有数据成员 public: Box(int,int,int); Box(); int volume(); /成员函数 ; Box:Box(int ht,int wd,int dp) height=ht; width=wd; depth=dp; Box:Box() /nothing int Box:volume() return height*width*depth; int main() Box thisbox(3,4,5); /声明一个类对象并初始化 cout return 0; 当一个类中没有 private 成员和 protected 成员时,也没有虚函数, 并且不 是从其他类中派生出来的,可以用来初始化。(以后再讲解) 5.内联函数 内联函数和普通函数的区别是: 内联函数是在编译过程中展开的。通常内联 函数必须简短。定义类的内联函数有两种方法:一种和 C 语言一样,在定义函数 时使用关键字 inline。如: inline int Box:volume() return height*width*depth; 还有一种方法就是直接在类声明的内部定义函数体, 而不是仅仅给出一个函 数原型。我们把上面的函数简化一下: #include iostream.h class Box private: int height,width,depth; public: Box(int ht,int wd,int dp) height=ht; width=wd; depth=dp; Box(); int volume() return height*width*depth; ; int main() Box thisbox(3,4,5); /声明一个类对象并初始化 cout return 0; 这样,两个函数都默认为内联函数了。 二、构造函数 什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函 数。上面的 Box()函数就是构造函数。C+允许同名函数,也就允许在一个类中 有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数, 这个构造函数可能会完成一些工作,也可能什么都不做。 绝对不能指定构造函数的类型,即使是 void 型都不可以。实际上构造函数 默认为 void 型。 当一个类的对象进入作用域时, 系统会为其数据成员分配足够的内存,但是 系统不一定将其初始化。和内部数据类型对象一样,外部对象的数据成员总是初 始化为 0。局部对象不会被初始化。构造函数就是被用来进行初始化工作的。当 自动类型的类对象离开其作用域时,所站用的内存将释放回系统。 看上面的例子,构造函数Box()函数接受三个整型擦黑素,并把他们赋值给 立方体对象的数据成员。 如果构造函数没有参数,那么声明对象时也不需要括号。 1.使用默认参数的构造函数 当在声明类对象时,如果没有指定参数,则使用默认参数来初始化对象。 #include iostream.h class Box private: int height,width,depth; public: Box(int ht=2,int wd=3,int dp=4) height=ht; width=wd; depth=dp; Box(); int volume() return height*width*depth; ; int main() Box thisbox(3,4,5); /初始化 Box defaulbox; /使用默认参数 cout cout return 0; 2.默认构造函数 没有参数或者参数都是默认值的构造函数称为默认构造函数。 如果你不提供 构造函数, 编译器会自动产生一个公共的默认构造函数,这个构造函数什么都不 做。如果至少提供一个构造函数,则编译器就不会产生默认构造函数。 3.重载构造函数 一个类中可以有多个构造函数。 这些构造函数必须具有不同的参数表。在一 个类中需要接受不同初始化值时,就需要编写多个构造函数,但有时候只需要一 个不带初始值的空的 Box 对象。 #include iostream.h class Box private: int height,width,depth; public: Box() /nothing Box(int ht=2,int wd=3,int dp=4) height=ht; width=wd; depth=dp; Box(); int volume() return height*width*depth; ; int main() Box thisbox(3,4,5); /初始化 Box otherbox; otherbox=thisbox; cout return 0; 这两个构造函数一个没有初始化值,一个有。当没有初始化值时,程序使用 默认值,即 2,3,4。 但是这样的程序是不好的。它允许使用初始化过的和没有初始化过的 Box 对象, 但它没有考虑当 thisbox 给 otherbox 赋值失败后, volume()该返回什么。 较好的方法是,没有参数表的构造函数也把默认值赋值给对象。 class Box int height,width,depth; public: Box() height=0;width=0;depth=0; Box(int ht,int wd,int dp) height=ht;width=wd;depth=dp; int volume() return height*width*depth; ; 这还不是最好的方法, 更好的方法是使用默认参数,根本不需要不带参数的 构造函数。 class Box int height,width,depth; public: Box(int ht=0,int wd=0,int dp=0) height=ht;width=wd;depth=dp; int volume() return height*width*depth; ; 三、析构函数 当一个类的对象离开作用域时, 析构函数将被调用(系统自动调用)。析构函 数的名字和类名一样,不过要在前面加上 。对一个类来说,只能允许一个析 构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用是完成一个 清理工作,如释放从堆中分配的内存。 我们也可以只给出析构函数的形式, 而不给出起具体函数体,其效果是一样 的,如上面的例子。但在有些情况下,析构函数又是必需的。如在类中从堆中分 配了内存,则必须在析构函数中释放。 C+的内部数据类型遵循隐式类型转换规则。假设某个表达市中使用了一个短整 型变量, 而编译器根据上下文认为这儿需要是的长整型,则编译器就会根据类型 转换规则自动把它转换成长整型, 这种隐式转换出现在赋值、 参数传递、 返回值、 初始化和表达式中。我们也可以为类提供相应的转换规则。 对一个类建立隐式转换规则需要构造一个转换函数,该函数作为类的成员, 可以把该类的对象和其他数据类型的对象进行相互转换。声明了转换函数,就告 诉了编译器,当根据句法判定需要类型转换时,就调用函数。 有两种转换函数。一种是转换构造函数;另一种是成员转换函数。需要采用 哪种转换函数取决于转换的方向。 一、转换构造函数 当一个构造函数仅有一个参数, 且该参数是不同于该类的一个数据类型,这 样的构造函数就叫转换构造函数。 转换构造函数把别的数据类型的对象转换为该 类的一个对象。 和其他构造函数一样,如果声明类的对象的初始化表同转换构造 函数的参数表相匹配,该函数就会被调用。 当在需要使用该类的地方使用了别的 数据类型,便宜器就会调用转换构造函数进行转换。 #include iostream.h #include time.h #include stdio.h class Date int mo, da, yr; public: Date(time_t); void display(); ; void Date:display() char year5; if(yrtm_mon+1; yr=tim-tm_year; if(yr=100) yr-=100; int main() time_t now=time(0); Date dt(now); dt.display(); return 0; 本程序先调用 time()函数来获取当前时间,并把它赋给 time_t 对象;然后 程序通过调用 Date 类的转换构造函数来创建一个 Date 对象,该对象由 time_t 对象转换而来。time_t 对象先传递给 localtime()函数,然后返回一个指向 tm 结构(time.h 文件中声明)的指针,然后构造函数把结构中的日月年的数值拷贝 给 Date 对象的数据成员,这就完成了从 time_t 对象到 Date 对象的转换。 二、成员转换函数 成员转换函数把该类的对象转换为其他数据类型的对象。 在成员转换函数的 声明中要用到关键字 operator。这样声明一个成员转换函数: operator aaa(); 在这个例子中,aaa 就是要转换成的数据类型的说明符。这里的类型说明符 可以是任何合法的 C+类型,包括其他的类。如下来定义成员转换函数; Classname:operator aaa() 类名标识符是声明了该函数的类的类型说明符。上面定义的 Date 类并不能 把该类的对象转换回 time_t 型变量,但可以把它转换成一个长整型值,计算从 2000 年 1 月 1 日到现在的天数。 #include iostream.h class Date int mo,da,yr; public: Date(int m,int d,int y) mo=m; da=d; yr=y; operator int(); /声明 ; Date:operator int() /定义 static int dys=31,28,31,30,31,30,31,31,30,31,30,31; int days=yr-2000; days*=365; days+=(yr-2000)/4; for(int i=0;i days+=dysi; days+=da; return days; int main() Date now(12,24,2003); int since=now; cout return 0; 三、类的转换三、类的转换 上面两个例子都是 C+类对象和内部数据对象之间的相互转换。也可以定义 转换函数来实现两个类对象之间的相互转换。 #include iostream.h class CustomDate public: int da, yr; CustomDate(int d=0,int y=0) da=d; yr=y; void display() cout ; class Date int mo, da, yr; public: Date(int m=0,int d=0,int y=0) mo=m; da=d; yr=y; Date(const CustomDate /转换构造函数 operator CustomDate(); /成员转换函数 void display() cout ; static int dys = 31,28,31,30,31,30,31,31,30,31,30,31; Date:Date(const CustomDate da=jd.da; for(mo=0;modysmo) da-=dysmo; else break; mo+; Date:operator CustomDate() CustomDate cd(0,yr); for(int i=0;i cd.da+=da; return cd; int main() Date dt(12,24,3); CustomDate cd; cd = dt; /调用成员转换函数 cd.display(); dt = cd; /调用转换构造函数 dt.display(); return 0; 这个例子中有两个类 CustomDate 和 Date, CustomDate 型日期包含年份和天 数。 这个例子没有考虑闰年情况。 但是在实际构造一个类时,应该考虑到所有问 题的可能性。 在 Date 里中具有两种转换函数,这样,当需要从 Date 型变为 CustomDate 型十,可以调用成员转换函数;反之可以调用转换构造函数。 不能既在 Date 类中定义成员转换函数, 又在 CustomDate 类里定义转换构造 函数。那样编译器在进行转换时就不知道该调用哪一个函数,从而出错. 四、转换函数的调用 C+里调用转换函数有三种形式:第一种是隐式转换,例如编译器需要一个 Date 对象,而程序提供的是CustomDate 对象,编译器会自动调用合适的转换函 数。另外两种都是需要在程序代码中明确给出的显式转换。C+强制类型转换是 一种, 还有一种是显式调用转换构造函数和成员转换函数。下面的程序给出了三 中转换形式: #include iostream.h class CustomDate public: int da, yr; CustomDate(int d=0,int y=0) da=d; yr=y; void display() cout ; class Date int mo, da, yr; public: Date(int m,int d,int y) mo=m; da=d; yr=y; operator CustomDate(); ; Date:operator CustomDate() static int dys=31,28,31,30,31,30,31,31,30,31,30,31; CustomDate cd(0,yr); for(int i=0;i cd.da+=da; return cd; int main() Date dt(11,17,89); CustomDate cd; cd = dt; cd.display(); cd = (CustomDate) dt; cd.display(); cd = CustomDate(dt); cd.display(); return 0; 五、转换发生的情形 上面的几个例子都是通过不能类型对象之间的相互赋值来调用转换函数, 还 有几种调用的可能: 参数传递 初始化 返回值 表达式语句 这些情况下,都有可能调用转换函数。 下面的程序不难理解,就不分析了。 #include iostream.h class CustomDate public: int da, yr; CustomDate() CustomDate(int d,int y) da=d; yr=y; void display() cout ; class Date int mo, da, yr; public: Date(int m,int d,int y) mo=m; da=d; yr=y; operator CustomDate(); ; Date:operator CustomDate() static int dys=31,28,31,30,31,30,31,31,30,31,30,31; CustomDate cd(0,yr); for (int i=0;i cd.da+=da; return cd; class Tester CustomDate cd; public: explicit Tester(CustomDate c) cd=c; void display() cd.display(); ; void dispdate(CustomDate cd) cd.display(); CustomDate rtndate() Date dt(9,11,1); return dt; int main() Date dt(12,24,3); CustomDate cd; cd = dt; cd.display(); dispdate(dt); Tester ts(dt); ts.display(); cd = rtndate(); cd.display(); return 0; 六、显式构造函数六、显式构造函数 注意上面 Tester 类的构造函数前面有一个 explicit 修饰符。 如果不加上这 个关键字, 那么在需要把 CustomDate 对象转换成 Tester 对象时, 编译器会把该 函数当作转换构造函数来调用。但是有时候,并不想把这种只有一个参数的构造 函数用于转换目的,而仅仅希望用它来显式地初始化对象,此时,就需要在构造 函数前加 explicit。如果在声明了 Tester 对象以后使用了下面的语句将导致一 个错误: ts=jd; /error 这个错误说明,虽然 Tester 类中有一个以 Date 型变量为参数的构造函数, 编译器却不会把它看作是从 Date 到 Tester 的转换构造函数, 因为它的声明中包 含了 explicit 修饰符。 七、表达式内部的转换七、表达式内部的转换 在表达式内部,如果发现某个类型和需要的不一致,就会发生错误。数字类 型的转换是很简单,这里就不举例了。下面的程序是把 Date 对象转换成长整型 值。 #include iostream.h class Date int mo, da, yr; public: Date(int m,int d,int y) mo=m; da=d; yr=y; operator long(); ; Date:operator long() static int dys=31,28,31,30,31,30,31,31,30,31,30,31; long days=yr; days*=365; days+=(yr-1900)/4; /从 1900 年 1 月 1 日开始计算 for(int i=0;i days+=da; return days; int main() Date today(12,24,2003); const long ott=123; long sum=ott+today; cout return 0; 在表达式中, 当需要转换的对象可以转换成某个数字类型,或者表达式调用 了作用于某个类的重载运算符时,就会发生隐式转换。 赠送以下资料赠送以下资料 英语万能作文英语万能作文( (模板型)模板型) Along with the advance of the society more and more problems are brought to our attention, one of which is that. 随着社会的不断发展,出现了越来越多的问题,其中之一便是 _。 As to whether it is a blessing or a curse, however, people take different attitudes. 然而, 对于此类问题, 人们持不同的看法。 (Hold different attitudes 持不同的看;Come up with different attitudes 有不同的看法) As society develops, people are attaching much importance to. 随着社会的发展,人们开始关注. People are attaching more and more importance to the interview during job hunting 求职的过程中,人们慢慢意识到面试的重要性。 As to whether it is worthwhile ., there is a long-running controversial debate. It is quite natural that people from different backgrounds may have divergent attitudes towards it. 关于是否值得_的问题,一直以来争论不休。当然, 不同的人对此可能持不同的观点。 In the process of modern urban development, we often find ourselves in a dilemma. 在都市的发展中,我们往往会陷入困境。 Recently the phenomenon has aroused wide concern, some people are in alarm that. 最近,这种现象引起了人们的广泛关注,有人开始担心 _。 The human race has entered a completely new stage in its history, with the increasingly rapid economic globalization and urbanization, more problems are brought to our attention. 人类进入了一个历史的崭新的阶段, 经济全球化、都市化的速度 不断加快,随之给我们带来了很多问题。 . plays such an important role that it undeniably becomes the biggest concern of the present world, there comes a question, is it a blessing or a curse? _显得非常重要而成为当今世界所关注的最大的问题,这 是无可厚非的。不过,问题是:我们该如何抉择? Now we are entering a new era, full of opportunities and challenges, 现在我们正在进入一个充满机会和挑战的新时代。 People from different backgrounds would put different interpretations on the same case. 不同行业的人对同一种问题的解释不尽相同。 The controversial issue is often brought into public focus. People from different backgrounds hold different attitudes towards the issue. 这中极具争议性的话题往往很受社会的关注。 不同的人对此问题 的看法也不尽相同。 When asked ., some people think. while some prefer. 说到_, 有人认为_, 而另一些人则认为_。 Just as the saying goes: so many people, so many minds. It is quite understandable that views on this issue vary from person to person. 俗话说,。不同的人对此有不同的看法是可以理解的。 To this issue, different people come up with various attitudes. 对于这个问题,不同的人持不同的观点。 There is a good side and a bad side to everything, it goes without saying that. 万事万物都有其两面性,所以,勿庸置疑,_。 When it comes to .,most people believe that ., but other people regard .as . 提到_问题,很多人认为_,不过,一些人则认 为_是_. When faced with., quite a few people claim that ., but other people think as. 提到_问题,仅少数人认为_,但另一些人则认 为_。 There is a public controversy nowadays over the issue of . There who criticize .argue that ., they believe that .,but people who favor ., on the other hand, argue that. 目前,_问题争议较大。批判_的人认为_,他们认为 _,不过,另一方面,赞同_的人则认为_。 Some people are of the opinion that.有些人认为_。 Many people claim that.很多人认为_。 A majority of 绝大多数 A large number of 很多人 Some people contend that . has proved to bring many advantages (disadvantages) 有些人认为_有很多有利之处(不利之处)。 Those who argue for . say that .economic development of the cities. 觉得_的人认为,_ 城市的经济发展。 Some people advocate that . 有些人在坚持认为_。 They hold that . 他们认为_。 People, who advocate that ., have their sound reasons (grounds) 坚持认为_的人也有其说法(依据)。 Those who have already benefited from practicing it sing high praise of it.那些从中受益的人对此大家褒奖。 Those who strongly approve of . have cogent reasons for it. 强烈认同_的人有很多原因。 Many people would claim that.有人会认为_。 People who support . give some or all of the following reasons. 那些支持_观点的人列出了如下原因:_。 But others hold the view that .但是,另外一些人则认为_。 观点的用词:Attitude, opinion, 与其搭配的动词以及词组:Take, have, come up with,set forth, put forward 等。 But on the other hand, there are also quite a few people who strongly advocate that.,. 不过,另一方面,也有少部分人坚持认为_。 But people who are ., on the other hand , maintain that. 不过,另一方面,_的人认为_。 However, there are a large number of people who hold a different view concerning this case. 然而,很多人对此有不同的看法。 问题用词:Issue, phenomenon,后接介词, on, over 等。 However, some others argue that. 然而,另一些人则认为_。 However, there are also some others who contend that. 然而,也有人认为_。 But other people set forth completely totally different argument concerning this case. 不过,对于此,另一些人则持完全不同的观点。 Some people examine this issue from another angle. 有的人用另一角度来看这一问题。 On the other hand, there are also many opponents who strongly . 另一方面,也有很多反对的人,他们认为_。 According to my personality and fondness, I would prefer . rather than. 根据我的个性以及兴趣, 我选择_而不会选择_。 Personally, I side with the latter (former) opinion. 就我个人而言,我支持后者(前者)_。 Personally, I am in favor of the former point of view. 就我个人而言,我较同意前一种看法。 To my point of view 我认为 Tomymind,theadvantagesfaroverweighthe drawbacks(disadvantages, shortcomings) 我认为,优点胜过缺点。 For my part, I stand on side of the latter opinion that. 就我而言,我较赞同后一种观点_。 As far as I am concerned, I am inclined to be on the side of the latter view. 在我看来,我较同意后一种观点。 After a thorough consideration, for my part, I am in favor of the latter view that. 经过深思熟虑,我较支持后一种看法,亦即_。 If asked to make a decision, I would prefer. 如果真的需要作出选择,我宁愿_。 展现问题篇 问题的常用词:question, problem, issue Recently, the issue of . has been bro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瑞幸AI行业面试题库精 编
- 高新技术企业岗位招聘面试实战模拟题库版
- 政治必修一第一单元知识框架
- 教育考试必 备:小学教师面试题库资源
- 2026届辽宁省抚顺市十中化学高三第一学期期末复习检测模拟试题含解析
- 天然药物学药品研究体系
- 熏蒸中医适宜技术
- 勤学医学发展路径与实践体系
- 运动康复行业面试常见问题及答案解析
- 养生从细胞开始
- 智慧水利与水资源管理作业指导书
- 人教版高一英语必修一单词表(带音标) mp3跟读朗读听力下载
- 中国移动家集客考试题库(浓缩700题)
- 医疗器械产品生命周期管理-洞察分析
- T∕CFA 0308052-2019 铸造绿色工艺规划要求和评估 导则
- 中国古代文学史明代文学
- 《薄冰英语语法详解》
- 律师事务所数据安全应急预案
- 生涯规划讲座模板
- 男生形体课课件
- 餐厅转包合同范本
评论
0/150
提交评论