



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.作业 4一、选择题1 下列关于动态联编的描述中,错误的是_。 DA) 动态联编是以虚函数为基础的B) 动态联编是在运行时确定所调用的函数代码的C) 动态联编调用函数操作是指向对象的指针或对象引用D)动态联编是在编译时确定操作函数的注:先期联编也称静态联编,迟后联编也称动态联编。注释:动态联编一直要到程序运行时才能确定调用哪个函数。虚函数是实现动态联编的必要条件之一。没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能够实现动态联编:类之间满足子类型关系; 调用虚函数操作的是指向对象的指针或者对象引用:或者是由成员函数调用虚函数。2 关于虚函数的描述中,正确的是_。DA
2、) 虚函数是一个静态成员函数B) 虚函数是一个非成员函数C) 虚函数既可以在函数说明时定义,也可以在函数实现时定义D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型注释:虚函数是非静态的成员函数。它不能是友元函数,但可以在另一个类中被声明为友元函数。虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的时候。派生类的虚函数与基类中对应的虚函数必须满足下列条件,否则派生类中的虚函数将丢失其虚特性,在调用时进行静态联编:派生类中的虚函数与基类中的虚函数具有相同的名称: 派生类中的虚函数与基类中的虚函数具有相同的参数个数和相同的对应参数类型: 派生类中的虚函数与基类中
3、的虚函数的返回值或者相同,或者都返回指针或引用,并且派生类虚函数所返回的指针或引用的基类型是基类中的虚函数所返回的指针或引用的基类型的子类型。3 在下面四个选项中, _是用来声明虚函数的。 A A)virtual B)public C)using D)false注释:说明虚函数的一般格式如下:virtua1<函数返回类型 ><函数名 >(< 参数表 >)4 对虚函数的调用 _。 DA) 一定使用动态联编B) 必须使用动态联编C)一定使用静态联编D)不一定使用动态联编注释:参见第1 题的注释。5 实现运行时的多态性要使用 _。 DA) 重载函数 B) 构造函数
4、 C) 析构函数 D) 虚函数注释:参见第 1 题的注释。6 要实现动态联编,必须通过 _调用虚函数。 AA) 对象指针 B) 成员名限定C) 对象名 D) 派生类名;.注释:参见第1 题的注释。7在派生类中重新定义虚函数时,除了_方面,其他方面都必须与基类中相应的虚函数保持一致。 DA) 参数个数B) 参数类型 C)函数名称D) 函数体注释:参见第2 题的注释。8下面关于构造函数和析构函数的描述,错误的是_。DA) 析构函数中调用虚函数采用静态联编B) 对虚析构函数的调用可以采用动态联编C)当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D)构造函数可以声明为虚函数注释:构造函数
5、不能声明为虚函数,但析构函数可以声明为虚函数。当基类的析构函数声明为虚函数时,无论派生类是否使用virtual关键字说明,派生类的析构函数一定是虚函数,对缺省析构函数亦然。而且,如果满足动态联编的其他条件,对虚析构函数的调用将采用动态联编。构造函数不能声明为虚函数,但在构造函数中可以调用虚函数。在构造函数或析构函数中调用虚函数,将采用静态联编。9 关于纯虚函数和抽象类的描述中,错误的是_。 CA) 纯虚函数是一种特殊的虚函数,它没有具体的实现B) 抽象类是指具有纯虚函数的类C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类D)抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出注释
6、:带有纯虚函数的类称为抽象类。抽象类中的纯虚函数的实现由派生类给出:但派生类仍可不给出纯虚函数的定义,继续作为抽象类存在。10 下列描述中, _是抽象类的特性。 DA) 可以说明虚函数B)可以进行构造函数重载C)可以定义友元函数D)不能说明其对象注释:抽象类区别于其他类的最根本的特征是不能定义对象。11 _ 是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。CA) 虚析构函数B)虚构造函数C)纯虚函数D)静态成员函数12如果一个类至少有一个纯虚函数,那么就称该类为_。AA) 抽象类B)虚基类C)派生类D)以上都不对13 以下 _成员函数表示纯虚函数。 CA
7、)virtual int vf(int);B)void vf(int)=0;C)virtual void vf()=0;D)virtual void vf(int)()注释:纯虚函数的声明格式如下:virtual<函数返回类型 ><函数名 >(< 参数表 >)=0 ;注意纯虚函数与虚函数体为空的区别。纯虚函数根本就没有函数体,而空的虚函数的函数体为空:前者所在的类是抽象类,不能直接进行实例化,而后者所在的类是可以实例化的:14 下面的描述中,正确的是 _。A A)virtual 可以用来声明虚函数;.B) 含有纯虚函数的类是不可以用来创建对象的,因为它是虚基
8、类C)即使基类的构造函数没有参数,派生类也必须建立构造函数D)静态数据成员可以通过成员初始化列表来初始化注释: virtual关键字既可以用来声明虚基类,也可以用来声明虚函数。含有纯虚函数的类是抽象类,它不能用来定义对象。静态数据成员的初始化必须在类体外进行。如果所有的基类和子对象构造函数都不需要参数,派生类也不需要参数时,派生类构造函数可以不定义。15 在下面程序中, A、 B、 C、D 四句编译时不会出现错误的是 _。A #include<iostream.h>class Basepublic:Base() Base(int c): count(c) virtual void
9、print() const=0;private:int count;class Derived: public Basepublic:Derived() :Base(0 ) Derived(int c): Base(c) void print()const cout<<"Derived"<<endl; ;void main()Derived d(10);Base *pb;pb=&d;/ABase & cb=d;Derived dd=*pb;Derived &cd=cb;/CBase bb=d;/D注释: B 和 C 处不符合赋
10、值兼容规则。D处出错是因为Base 是含有纯虚函数的抽象类,不能建立抽象类的对象。16 在下面程序中, A, B、 C、 D 四句编译时出现错误的是 _。 Cclass A/Apublic:/BA( ) func();/Cvirtual void func()=0;/D;.;注释:构造函数中不能调用纯虚函数,但可以调用虚函数。17分析下面的程序,正确的输出结果是_B#include <iostream.h>#include <string.h>class Basepublic:virtual char *fun() const=0;char* Base:fun() co
11、nst return“Base”; class Derivedl1: virtual public Basepublic:char* fun() const return "Derived11" ;class Derivedl2: virtual public Basepublic:char* fun() const return "Derivedl2" ;class Derived2: public Derivedl1,public Derivedl2public:char* fun() constchar *ptr;ptr=new charstrle
12、n(Derivedl1:fun()+strlen(Derivedl2:fun()+l;strcpy(ptr,Derived11:fun(),strcat(ptr,Derived12:fun();return ptr;void main()Base *pb;pb=new Derived11;cout<<pb->fun()<<endl;pb=new Derivedl2;cout<<pb->fun()<<endl;pb=new Derived2;cout<<pb->fun()<<endl;A)B);.BaseD
13、erivedl1BaseDerivedl2BaseDerivedl1Derivedl2C)D)Derivedl1Derivedl2Derivedl1Derivedl2Derivedl1Derivedl2Derivedl1Derivedl2注释:参见第1题、第 2题的注释。派生类Derivedll 、 Derivedl2 和 Derived2 中的函数 fun 与基类 Base中的虚函数 fun 的函数名、参数表和返回类型都完全相同,因此这三个类中的 fun 函数也是虚函数,对 fun 函数的调用采用动态联编。二、填空题1动态联编中直到 _ 程序运行 _时才能确定调用哪个函数;而静态联编则是在
14、_ 程序编译时进行的。注释:动态联编与静态联编的概念。2 静态联编所支持的多态性称为 _ 编译时的 _多态性,动态联编所支持的多态性则称为_ 运行时的 _多态性,动态多态性由_ 虚函数 _来支持。注释:在C+中,多态性的实现和联编有关。3对虚函数使用对象指针或引用调用,系统使用_ 动态 _联编;使用对象调用时系统使用 _ 静态 _联编。注释:参见选择填空第1 题、第 5 题的注释。4 动态联编是在 _ 虚函数 _的支持下实现的, 它通过 _ 指针或引用 来调用该函数操作。5在一个成员函数内调用一个虚函数时,对该虚函数的调用进行_动态 _联编。6在析构函数中调用虚函数时,采用_静态 _联编。7
15、C+中 _不支持 _虚构造函数,但 _支持 _虚析构函数。注释:参见选择填空第 8 题的注释。多态是不同的对象对同一消息有不同的行为特征,虚函数作为运行过程中多态的基础,主要是针对对象的,而构造函数的调用意味着要建立一个对象,这时必须确切地知道这个对象的类型,并且,我们也不会为一个已存在的对象调用构造函数。因此,虚构造函数没有意义。在 C+中可以声明虚析构函数。 析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。析构函数设置为虚函数后,在使用指针调用时可以进行动态联编,实现运行时的多态,从而保证使用基类的指
16、针就能够调用适当的析构函数针对不同的对象进行清理工作。8 在类定义中,将 _=0_置于虚函数的函数原型的末尾可以将该函数声明为纯虚函数9带有 _纯虚函数 _的类称为抽象类,它只能作为_ 基类 _ 来使用。注释:抽象类的作用主要有两个:直接用作基类或用作指针或引用的基类型。10 抽象类不能 _定义对象 _,但可以 _ 声明抽象类的指针或引用 _作为参数类型,函数返回类型或显式转换类型。注释:注意抽象类不能定义对象是指不能定义需要分配存储空间的对象。因此可以声明抽象类的指针或引用,它们在程序运行时可以指向并访问派生类对象。11 下列程序的运行结果如下:Derivel's Print() c
17、alled.;.Derive2's Print() called.根据结果将程序补充完整。#include <iostream.h>class Basepublic:Base(int i) b=i;_virtual void Print()=0;_protected:int b;class Derivel :public Basepublic:_Derive1( int i ):Base( i ) _void Print()cout<< ” Derive1 s Print() called.” <<endl;class Derive2:public
18、Base_public:Derive1(int i ): Base( i ) void Print( ) cout<<” Derive2 s Print( ) called._ “ << endl; ;void fun( _Base *obj_)obj->Print();void main()_Derive1 *d1=new Derive1(1);_Derive2 *d2=new Derive2(2);fun(dl);fun(d2);注释:派生类Derived1和 Derived2从基类 Base 公有继承,它们是Base 的子类型。主程序中两次调用fun 函数,
19、该函数通过指针对象obj 调用了 Print函数,得到了不同的输出结果。而同样的消息被不同类型的对象接收时导致完全不同的行为,恰好体现了面向对象的多态特性。根据运行时的多态必须满足的条件,Print函数一定是一个虚函数,并且在所有类中都必须进行定义。由于Base 类中的 Print函数除了提供一个公共的接口外,没有其他的作用,所以最好定义为纯虚函数。;.12 将下列程序补充完整。#include <iostream.h>class convertpublic:convert(double i) vail=i;_ virtual void compute( )=0;_protecte
20、d:double val1;double val2;/liters to gallonsclass l_to_g:public convertpublic:_ l_to_g(double i ) : convert(i) _void compute()val2=val1/3.7854;cout<<val1 <<" liters is "<<val2<<" gallons."<<endl;/Fahrenheit to Celsiusclass f_to_c:public convert_ publ
21、ic:f_to_c(double i ):convert( i ) void compute( )val2=(val1-32)*5/9;cout<<val1<<” Fahrenheit is“ <<val2<< ” Celsius.” <<endl;void fun(_convert& f_)pute();void main()l_to_g lgobj(4);f_to_c fcobj(70);fun(lgobj);.fun(fcobj);13根据不同的输出结果,在函数Tone 中填入正确的语句。#include <ios
22、tream.h>class Instrumentpublic:virtual void Print() const cout<<"Instrument:Print"<<endl; ;class Piano: public Instrumentpublic:void Print()const cout<<"Piano:Print"<<endl; ;class Guitar: public Instrumentpublic:void Print() const cout<<"Guit
23、ar:Print"<<endl; ;void Tone(_ _)_ _void main()Guitar g;Tone(g);Piano p;Tone(p);(1) 输出结果为:Instrument: :Print Instmment:Print(2) 输出结果为:Guitar: :PrintPiano: :Print(1)Instrument obj obj.Print( )(2)Instrument&obj obj.Print( )参考第 3 题,第一次的输出是由静态联编产生的,第二次的输出是由动态态联编产生的。;.14 下列程序的运行结果如下:Base
24、9;s cons.Derived's cons.Derived's des.Base's des.根据结果将程序补充完整。#include <iostream.h>class Basepublic:Base() cout<<"Base's cons."<<endl; _ virtual Base( )_ cout<<"Base's des."<<endl; ;class Derived:public Basepublic:Derived() cout<
25、;<"Derived's cons."<<endl; Derived() cout<<"Derived's des."<<endl; ;void main()Base *ptr=_new Derived_delete ptr;三、编程1 在作业 1 编程 1 的 Point 类中完成赋值运算符=、插入运算符 <<、比较运算符=、! =和加法运算符 +、 -的重载。#include <math.h>#include <iostream.h>class Point
26、public:Point(float x=0, float y=0, float z=0): x_(x), y_(y), z_(z) Point(const Point& p) : x_(p.x_), y_(p.y_), z_(p.z_) /形参 point 为常引用,它所引用的对象不能被更新,即传给它的实参不能被更新。void negate() x_ *= -1; y_ *= -1; z_ *= -1; double norm() return sqrt(x_*x_ + y_*y_ + z_*z_); void print() cout << '(' &l
27、t;< x_ << "," << y_ << "," << z_ << ")"Point& operator=(const Point& point);bool Point:operator=(const Point& point) const;./ 常成员函数,只有它才有资格操作常量和常对象 return x_ = point.x_ && y_ = point.y_ && z_ = point.z_;bool P
28、oint:operator!=(const Point& point) const return x_ != point.x_ | y_ != point.y_ | z_ != point.z_;friend Point operator+(const Point& p1, const Point& p2);friend Point operator-(const Point& p1, const Point& p2);friend ostream& operator<<(ostream& ostr, const Point&
29、amp; point); private:float x_, y_, z_;Point operator+(const Point& p1, const Point& p2) return Point(p1.x_+p2.x_,p1.y_+p2.y_,p1.z_+p2.z_);Point operator-(const Point& p1, const Point& p2) return Point(p1.x_-p2.x_,p1.y_-p2.y_,p1.z_-p2.z_);ostream& operator<<(ostream& ost
30、r, const Point& point) return ostr << "(" << point.x_ << "," <<point.y_ << "," <<point.z_ << ")"Point& Point:operator=(const Point& point) x_ = point.x_;y_ = point.y_;z_ = point.z_;return *this;void main()
31、Point p(12,-3,4),q(14,5,12),r1,r2; r1=p+q; cout<<r1<<r1.norm()<<endl;r2=p-q+r1;cout <<r2<<r2.norm()<<endl;if(r1=r2)cout <<"r1=r2"<<endl;else cout <<"r1!=r2"<<endl;2 假设 Point 类的坐标为整型,对它重载+( 自增 )、 -(自减)运算符(包括前后缀)。#include
32、<math.h>#include <iostream.h>.class Point public:Point(int x=0, int y=0, int z=0): x_(x), y_(y), z_(z) Point(const Point& p) : x_(p.x_), y_(p.y_), z_(p.z_) Point& operator +() x_+;y_+;z_+; return *this;/为什么要返回引用,下列代码行吗?/Point operator +()/x_+;y_+;z_+;/ return *this;/Point operato
33、r +(int)/为什么不必返回引用 Point temp(*this);x_+;y_+;z_+;return temp;Point& operator -() x_-;y_-;z_-; return *this;Point operator -(int) Point temp(*this); x_-;y_-;z_-;return temp;void print() cout << '(' << x_ << "," << y_ << "," << z_ <
34、;< ")"private:int x_, y_, z_;void main() Point p(12,-3,4); cout << "p = " p.print();Point q(p+);cout << "q = "q.print();.cout << "p = "p.print();+(+p);cout << "p = "p.print();p-;cout << "p = "p.print();3 定义一
35、个Shape 基类,由它派生出Rectangle 和 Circle 类,二者都有GetArea( ) 函数计算对象的面积。使用Rectangle 类创建一个派生类Square。#include <iostream.h>class Shape public:/Shape() /Shape() virtual float GetArea()return -1;class Circle:public Shapepublic:Circle(float radius):itsRadius(radius)/Circle()float GetArea()return 3.14*itsRadius
36、*itsRadius;private:float itsRadius;class Rectangle : public Shapepublic:Rectangle(float len,float width): itsLength(len),itsWidth(width); /Rectangle();float GetArea()return itsLength*itsWidth;float GetLength()return itsLength;float GetWidth()return itsWidth;private:float itsWidth;float itsLength;.cl
37、ass Square:public Rectanglepublic:Square(float len);/Square();Square:Square(float len): Rectangle(len,len) void main()Shape *sp;sp=new Circle(5);cout << "The area of the Circle is "<<sp->GetArea()<<endl;delete sp;sp=new Rectangle(4,6);cout << "The area of th
38、e Rectangle is "<<sp->GetArea()<<endl; delete sp;sp=new Square(5);cout << "The area of the Square is "<<sp->GetArea()<<endl;delete sp;4 定义一个Shape 抽象类,由它派生出Rectanglr 和 Circle 类,二者都有GetArea( ) 函数计算对象的面积,GetPerim( )函数计算对象的周长。#include <iostream.h>
39、class Shape public:/Shape() /Shape() virtual float GetArea()=0;virtual float GetPerim()=0;class Circle:public Shapepublic:Circle(float radius):itsRadius(radius)/Circle()float GetArea()return 3.14*itsRadius*itsRadius;float GetPerim()return 6.28*itsRadius;private:float itsRadius;.class Rectangle : pub
40、lic Shapepublic:Rectangle(float len,float width): itsLength(len),itsWidth(width); /Rectangle();virtual float GetArea()return itsLength*itsWidth;float GetPerim()return 2*(itsLength+itsWidth);private:float GetLength()return itsLength;float GetWidth()return itsWidth;private:float itsWidth;float itsLeng
41、th;void main()Shape *sp;sp=new Circle(5);cout << "The area of the Circle is "<<sp->GetArea()<<endl;cout << "The Perimeter of the Circle is "<<sp->GetPerim()<<endl; delete sp;sp=new Rectangle(4,6);cout << "The area of the Rectan
42、gle is "<<sp->GetArea()<<endl;cout << "The Perimeter of the Rectangle is "<<sp->GetPerim()<<endl; delete sp;.作业 6 答案:一,选择题:1D2D3A4D5D6A7D8D9C10D11C 12A13C 14A 15A16C 17B二,填空题:2程序运行程序编译2编译时的运行时的虚函数3动态静态4虚函数指针或引用5 动态6 静态7 不支持 支持8 =09 纯虚函数基类10 定义对象声明抽象
43、类的指针或引用11 virtual void Print()=0; Derive1( int i ):Base( i ) public:Derive1(int i ): Base( i ) void Print( ) cout<<”Derive2 s Print( ) called.“<< endl; Base *obj Derive1 *d1=new Derive1(1);_Derive2 *d2=new Derive2(2);12 virtual void compute( )=0; l_to_g(double i ) : convert(i) public:f_t
44、o_c(double i ):convert( i ) void compute( )val2=(val1-32)*5/9;cout<<val1<<” Fahrenheit is“ <<val2<< ” Celsius.” <<endl; convert& f13(1) Instrument obj obj.Print( )(2) Instrument&objobj.Print( )14 virtual Base( ) new Derived三、编程1,#include <math.h>#include &
45、lt;iostream.h>class Point public:Point(float x=0, float y=0, float z=0): x_(x), y_(y), z_(z) Point(const Point& p) : x_(p.x_), y_(p.y_), z_(p.z_) void negate() x_ *= -1; y_ *= -1; z_ *= -1; ;.double norm() return sqrt(x_*x_ + y_*y_ + z_*z_); void print() cout << '(' << x_
46、<< "," << y_ << "," << z_ << ")"Point& operator=(const Point& point);bool Point:operator=(const Point& point) const return x_ = point.x_ && y_ = point.y_ && z_ = point.z_;bool Point:operator!=(const Point& po
47、int) const return x_ != point.x_ | y_ != point.y_ | z_ != point.z_;friend Point operator+(const Point& p1, const Point& p2);friend Point operator-(const Point& p1, const Point& p2);friend ostream& operator<<(ostream& ostr, const Point& point); private:float x_, y_,
48、z_;Point operator+(const Point& p1, const Point& p2) return Point(p1.x_+p2.x_,p1.y_+p2.y_,p1.z_+p2.z_);Point operator-(const Point& p1, const Point& p2) return Point(p1.x_-p2.x_,p1.y_-p2.y_,p1.z_-p2.z_);ostream& operator<<(ostream& ostr, const Point& point) return o
49、str << "(" << point.x_ << "," <<point.y_ << "," <<point.z_ << ")"Point& Point:operator=(const Point& point) x_ = point.x_;y_ = point.y_;z_ = point.z_;return *this;void main() Point p(12,-3,4),q(14,5,12),r1,r2;
50、r1=p+q; cout<<r1<<r1.norm()<<endl;r2=p-q+r1;cout <<r2<<r2.norm()<<endl;if(r1=r2)cout <<"r1=r2"<<endl;.else cout <<"r1!=r2"<<endl;2,#include <math.h>#include <iostream.h>class Point public:Point(int x=0, int y
51、=0, int z=0): x_(x), y_(y), z_(z) Point(const Point& p) : x_(p.x_), y_(p.y_), z_(p.z_) Point& operator +() x_+;y_+;z_+; return *this;Point operator +(int) Point temp(*this); x_+;y_+;z_+;return temp;Point& operator -() x_-;y_-;z_-; return *this;Point operator -(int) Point temp(*this);x_-;y_-;z_-;return temp;void print() cout << '(' << x_ << "," << y_ << "," << z_ << ")"private:int x_, y_, z_;void main() Point p(12,-3,4); cout << "p = " p.print();Point q(p+);.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗健康数据在健康保险行业中的价值与作用
- 医疗大数据分析推动个性化治疗进展
- 医疗商业化的未来趋势与全科医生培养
- 医疗AI在语音疾病康复中的作用
- 体育课评价有效性的总结模版
- 自来水公司办公室工作总结模版
- 人员入驻合同范例
- 区块链在商业合作中的信任机制构建与价值
- 医疗设备与健康信息的安全管理研究
- 胎粪性肠梗阻的临床护理
- 糖尿病合并痛风
- 中西文化鉴赏知到智慧树章节测试课后答案2024年秋郑州大学
- 管理心理学-第二次形成性考核-国开(SC)-参考资料
- 口腔健康教育宣讲
- 《商业银行经营管理》课件-商业银行中间业务及表外业务管理
- 牙科市场细分领域分析-洞察分析
- 初一英语期中考试质量分析
- 第16课《经济危机与资本主义国家的应对》中职高一下学期高教版(2023)世界历史全一册
- 猎聘测评题库
- 货运车队的管理制度模版(2篇)
- 2024年贵州省贵阳市中考生物试卷(附答案)
评论
0/150
提交评论