选择题(类与对象)
C++基础习题(选择,循环,类与对象)

1.11.C++概述例题5:C++的合法注释是()。
A./*This is a C program/* B.// This is a C programC.“This is a C program”D.//This is a C program//答案:B分析:单行注释常采用“//”,多行注释采用“/*”和“*/”。
单行注释也可采用“/*”和“*/”,但答案A书写格式错误,不能选答案A。
注释和字符串的区别,双引号内的字符为字符串。
不能选答案C。
单行注释不需要结束符“//”,如果有,只能作为注释的一部分存在。
也不能选答案D。
例题6:下面标识符中正确的是()。
A._abc B.3ab C.int D.+ab答案:A分析:C++的标识符由字母、下划线和数字组成,而且第一个字符不能为数字。
答案B第一个字符为数字不能选B。
标识符不能为关键字,不能选答案C。
答案D第一个字符不是字母或下划线,也不能选。
例题7:分析下列该程序的错误。
输入数据格式为:2,5(回车)。
main(){ int sum=0;int a,b;cout<<"input a,b:";cin>>a>>b;sum=a+b;cout<<sum<<endl;}本程序把输入的两个数据进行累加并输出结果。
输入数据格式为:2 5。
正确程序:#include <iostream> // 编译预处理命令,以“#”开头。
把系统已经定义好的输入//输出功能包含到本程序中。
using namespace std; //使用std 名字空间int main() // 程序的主函数{ // 主函数开始int sum=0; // 定义一个变量sum存放累加结果,并且赋初值为0int a,b; // 定义两个变量,保存输入值cout<<"input a,b:"; // 提示输入cin>>a>>b; // 使用基本输入设备cin输入两个变量值sum=a+b; // 进行累加,结果保存到sum变量cout<<sum<<endl; // 使用基本输出设备cout输出累加结果sum}分析:(1)没有使用编译预处理命令:#include。
java类与对象选择题附加答案解析

Java 类与对象选择题练习附加答案解析1. 以下关于Java类的描述,正确的是:A. 类是对象的实例。
B. 类可以包含属性和方法。
C. 类不能继承其他类。
D. 类只能包含一个方法。
答案: B。
解析:类是对象的蓝图或模板,可以包含属性(成员变量)和方法(成员函数)。
2. 在Java中,要创建一个类的对象,应使用哪个关键字?A. newB. createC. instantiateD. make答案: A。
解析:在Java中,使用`new`关键字来创建类的对象。
3. 在以下关于构造方法的描述中,正确的是:A. 构造方法必须有返回类型。
B. 构造方法的名称必须与类名相同。
C. 构造方法可以是静态的。
D. 构造方法可以重载但不能覆盖。
答案: B。
解析:构造方法的名称必须与类名相同,并且没有返回类型(包括void)。
构造方法可以重载(多个同名但参数不同的方法),但不能覆盖(重写父类方法)。
4. 如果`MyClass`类有一个名为`display`的方法,且`myObject`是`MyClass`类的一个实例,如何调用该方法?A. display();B. MyClass.display();C. myObject.display();D. MyClass::display();答案: C。
解析:通过对象实例`myObject`来调用类的非静态方法`display`。
5. 以下哪个选项是关于`this`关键字的正确描述?A. `this`关键字指向类的超类(父类)。
B. `this`关键字只能在静态方法中使用。
C. `this`关键字引用当前对象的实例。
D. `this`关键字用于创建新的对象。
答案: C。
解析:`this`关键字引用当前对象的实例,可以在类的方法和构造方法中使用来引用当前对象的成员变量或方法。
6. 在Java中,如果类B继承自类A,且类A是基类,则下列哪个选项是正确的?A. 类B是类A的超类。
JAVA类与对象及数组习题及答案

V JA VA A 类和对象及数组习题类和对象及数组习题一、选择题一、选择题(1)下列构造方法的调用方式中,正确的是()下列构造方法的调用方式中,正确的是(D )--原因:在通过new 实例化一个类对象时系统会自动调用该类相应的构造方法。
A .按照一般方法调用.按照一般方法调用B .由用户直接调用.由用户直接调用C .只能通过new 自动调用自动调用D .被系统调用.被系统调用(2)在Java 中,能实现多重继承效果的方式是(中,能实现多重继承效果的方式是(C )--原因:一个类可以同时实现多个接口。
Java 接口反映了对象较高层次的抽象,还弥补了Java 只支持单继承的不足,可用它来完成多继承的一些功能。
A .内部类.内部类B .适配器.适配器C .接口.接口D .同步.同步(3)int 型public 成员变量MAX_LENGTH ,该值保持为常数100,则定义这个变量的语句是( D )—原因:java 中定义常量用关键字final 来定义。
A .public int MAX_LENGTH=100B .final int MAX_LENGTH=100C .public const int MAX_LENGTH=100D .public final int MAX_LENGTH=100 (4)下列叙述中,正确的是(A )—原因:Java 严格区分大小写,所以变量number 与Number 不相同;Java 中的注释方式除了“//”行注释之外还有段注释“/*-------*/”和文档注释/**-------*/。
Java 源文件中的public 类只能有一个。
A. 声明变量时必须指定一个类型B. Java 认为变量number 与Number 相同相同C. Java 中唯一的注释方式是"//"D. 源文件中public 类可以有0或多个或多个(5)下列叙述中,错误的是( D)—原因:子类继承父类,并且可以有自己的成员变量和成员方法。
《类与对象》课后习题(含答案)

问题一:程序执行结果是
问题二:本程序中,y、z 是 class Test{ public: static int Data; }; int Test::Data=100; //A void main(void) { Test t1,t2; t1.Data=200; t2.Data=300; //B //C
2、写出程序的输出结果。 #include <iostream> #include <cstring> using namespace std; class SomeClass { int One , Two; public: SomeClass(int a = 1, int b = 1) { One = a; Two = b; cout << "Structor" << endl; } SomeClass(SomeClass &obj) { { cout<<NumA<<'\t'<<"is Destructor."<<endl; } }; int main() { MyTestClass Myclass1(5), Myclass2.Print(); return 0; } 程序的运行结果为: Myclass2(Myclass1);
,第二行是
A.show( ); } 15 10 三、程序填空题
B.show( );
1、完成如下的类,在横线中填写合适的内容。 #include <iostream> #include <cstring> using namespace std; enum Esex{mid , man , woman};//枚举请自学 2.7 class Person { int Num; //编号 char Name[12]; //姓名 Esex Sex; //性别 float Weight; //体重 public: Person(int , char * , Esex , float); Person(); ~Person() {} void PrintInfo(); int Workdays(); }; Person::Person( { Num = id; int id ,char *name , Esex s , float w)
国家二级C++机试(类和对象)模拟试卷14

国家二级C++机试(类和对象)模拟试卷14(总分:54.00,做题时间:90分钟)一、选择题(总题数:27,分数:54.00)1.下列关于this指针的描述中,正确的是( )。
(分数:2.00)A.类的成员函数都有this指针B.类的友元函数都有this指针C.任何与类相关的函数都有this指针D.类的非静态成员函数都有this指针√解析:解析:this是成员函数所属对象的指针,它指向类对象的地址。
成员函数通过这个指针可以知道自己属于哪一个对象,它隐藏于每个类的非静态成员函数中。
2.有如下程序:#include<iostream>using namespace std;class Test { public:Test() {n+=2;} ~Test(){n-=3;} static int getNum0{return n;} private:static int n;};int Test::n=1;int main() { Test*p=new"rest;delete p;tout<<''n=''<<Test::getNum()<<end1;return 0;} 执行后的输出结果是( )。
(分数:2.00)A.n=0 √B.n=1C.n=2D.n=3解析:解析:此题考查的是静态数据成员和静态成员函数。
静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。
题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n-=3”后n的值为0。
3.有如下程序: #include<iostream> using namespace std; class Obj{ static int i; public:Obj(){i++;} ~Obj(){i--;} static hat getVal(){return i;} }; int Obj::i=0; void f(){Obj ob2;cout<<ob2.getVal();} int main(){ Obj ob1;f();Obj*ob3=new Obj;cout<<ob3->getVal q(); delete ob3;cout<<Obj::getVal(); return 0; } 程序的输出结果是( )。
类与对象习题

类与对象习题类与对象选择题5.若有以下说明,在类外使⽤对象objX成员的正确语句是( c )。
class X{ int a;void fun1();public:void fun2();};X objX ;(a) objX.a=0; (b) objX.fun1(); (c) objX.fun2(); (d) X::fun1();6.若有以下说明,对n的正确访问语句是( b )。
class Y{ //…… ;public:static int n;};int Y::n;Y objY;(a) n=1; (b) Y::n=1; (c) objY::n=1; (d) Y->n9.若有以下类T说明,函数fFriend的错误定义是( c )。
class T{ int i;friend void fFriend(T&,int) ;};(a) void fFriend(T &objT,int k) { objT.i = k; }(b) void fFriend(T &objT,int k) { k = objT.i; }(c) void T::fFriend(T &objT,int k) { k += objT.i; }(d) void fFriend(T &objT,int k) { objT.i += k; }10.在类定义的外部,可以被访问的成员有( c )。
(a) 所有类成员(b) private或protected的类成员(c) public的类成员(d) public或private的类成员12.说明⼀个类的对象时,系统⾃动调⽤( b );撤消对象时,系统⾃动调⽤( c )。
1(a) 成员函数(b) 构造函数(c) 析构函数(d) 友员函数13.下⾯对构造函数的不正确描述是( b )。
(a) 系统提供默认的构造函数(b) 构造函数可以有参数,所以也可以有返回值(c) 构造函数可以重载(d) 构造函数可以设置默认参数14.下⾯对析构函数的正确描述是( c )。
类和对象练习题

类和对象一、选择题1、下面对方法的作用描述不正确的是:( d )A、使程序结构清晰B、功能复用C、代码简洁D、重复代码2、方法内定义的变量:( b )A 、一定在方法内所有位置可见B、可能在方法内的局部位置可见C、在方法外可以使用D、在方法外可见3、方法的形参:(a)A、可以没有B、至少有一个C、必须定义多个形参D、只能是简单变量4、方法的调用:(c)A、必须是一条完整的语句B、只能是一个表达式C、可能是语句,也可能是表达式D、必须提供实际参数5、return 语句:( d)A、不能用来返回对象B、只可以返回数值C、方法都必须含有D、一个方法中可以有多个return 语句6、void 的含义:(d)A、方法体为空B、方法体没有意义C、定义方法时必须使用D、方法没有返回值7、main()方法的返回类型是:( c )A 、boolean B、int C、void D、static8、方法重载所涉及的方法:( a )A、有相同的名字B、参数个数必须不同C、参数类型必须不同D、返回类型必须不同9、下面关于类和对象之间关系的描述,正确的是( c )A、联接关系B、包含关系C、具体与抽象的关系D、类是对象的具体化10、下面关于java中类的说法哪个是不正确的( c )A、类体中只能有变量定义和成员方法的定义,不能有其他语句。
B、构造方法是类中的特殊方法。
C、类一定要声明为public的,才可以执行。
D、一个java文件中可以有多个class定义。
11、下列哪个类声明是正确的( d)A、public void H1{…} B 、public class Move(){…}C、public class void number{}D、public class Car{…}12、下面的方法声明中,哪个是正确的(c)A、public class methodName(){}B、public void int methodName(){}C、public void methodName(){}D、public void methodName{}13、下述哪些说法是不正确的?( b )A、实例变量是类的成员变量B、实例变量是用static关键字声明的C、方法变量在方法执行时创建D、方法变量在使用之前必须初始化14、下面对构造方法的描述不正确是( b)。
python类和对象 选择题

python类和对象选择题一、选择题1. 下面关于Python类的描述中,错误的是:A. 在Python中,类是一种抽象数据类型B. Python中的类可以继承父类的属性和方法C. 类中的函数我们称之为方法D. 类中的变量称为属性2. 在Python中,对象是指:A. 类的实例化对象B. 只能是类的实例化对象C. 是指实例化过的类D. 都不对3. 下面关于Python对象的描述中,错误的是:A. 对象具有自己的属性和方法B. 在Python中,对象具有动态性,可以新增或删除属性和方法C. 对象是不可变的D. 对象可以通过类来创建4. 在Python中,类的继承的语法是:A. class ChildClass(BaseClass):B. class ChildClass extend BaseClassC. class ChildClass Inherits BaseClassD. class ChildClass : public BaseClass5. 下列代码中,实例化对象stu_b的类是:class Student:def __init__(self, name, age): = nameself.age = agestu_a = Student('Tom', 18)stu_b = Student('Jerry', 20)A. StudentB. TomC. JerryD. age6. 下列代码中,哪一行是在修改stu_a对象的属性age的值:class Student:def __init__(self, name, age): = nameself.age = agestu_a = Student('Tom', 18)stu_a.age = 20A. def __init__(self, name, age):B. = nameC. stu_a = Student('Tom', 18)D. stu_a.age = 207. 下列代码中,哪一个是在类Student中定义一个方法say_hi:class Student:def __init__(self, name, age): = nameself.age = agedef say_hi(self):print("Hi, I am " + )stu_a = Student('Tom', 18)A. def __init__(self, name, age):B. = nameC. def say_hi(self):D. stu_a = Student('Tom', 18)二、答案解析1. 答案:A解析:在Python中,类不是一种抽象数据类型,而是一种数据结构。
面向对象程序设计习题

第6章面向对象程序设计一. 选择题1.下面有关类和对象的说法中, 不对的的是【】。
A) 类是系统提供的一种数据类型B) 对象是类的实例C) 类和对象的关系是抽象和具体的关系D) 任何一个对象只能属于一个具体的类2. 面向对象的特点重要概括为【】。
A) 可分解性、可组合型性和可分类性B) 继承性、封装性和多态性C) 封装性、易维护性、可扩展性和可通用性D) 抽象性、继承性和封装性3. 要使一个类能被同一命名空间中的其他类访问, 但不能被这个命名空间以外的类访问, 该类可以【】。
A) 不使用任何修饰符B) 使用private修饰符C) 使用public修饰符D) 使用internal修饰符4. 在C#中, 【】访问修饰符修饰的字段只能由当前程序集访问。
A) private B) public C) protected D) internal5. 类的字段和方法的默认访问修饰符是【】。
A) public B) private C) protected D) internal6. 下列关于构造函数的描述中, 不对的的是【】。
A) 构造函数中, 不可以包含return语句B) 一个类只能有一个构造函数C) 实例构造函数在生成类实例时被自动调用D) 用户可以定义无参构造函数7. 下列关于构造函数的描述中, 【】是对的的。
A) 构造函数名必须与类名相同B) 构造函数不可以重载C) 构造函数不能带参数D) 构造函数可以声明返回类型8. 下列的【】不是构造函数的特性。
A) 构造函数的函数名与类名相同B) 构造函数可以重载C) 构造函数可以带有参数D) 可以指定构造函数的返回值类型9. 类ClassA有一个名为M1的方法, 在程序中有如下一段代码, 假设该段代码是可以执行的, 则声明M1方法时一定使用了【】修饰符。
ClassA Aobj=new ClassA();ClassA.M1();A) public B) public static C) private D) virtual10. 在C#中, 从属性的读写特性上来进行分类, 可以划分为以下3种, 除了【】。
python 类和对象 选择题

一、Python 类和对象选择题1. 下列哪个不是 Python 类的类变量?A. \_\_init\_\_B. \_\_doc\_\_C. \_\_dict\_\_D. \_\_name\_\_2. 在 Python 中,下列哪个选项是正确的?A. 每个类都必须有一个构造函数B. 每个类都必须有一个析构函数C. 构造函数和析构函数的名称必须相同D. 构造函数和析构函数的名称由用户决定3. 下列代码的输出是什么?```pythonclass Car:def __init__(self, brand):self.brand = brandcar1 = Car("Toyota")car2 = Car("Honda")print(car1.brand, car2.brand)```A. Toyota ToyotaB. Toyota HondaC. Honda ToyotaD. Honda Honda4. 下列代码的输出是什么?```pythonclass Animal:def __init__(self, name): = nameclass Dog(Animal):def __init__(self, name, breed): super().__init__(name)self.breed = breeddog = Dog("Buddy", "Labrador") print(, dog.breed)```A. Buddy LabradorB. None LabradorC. Buddy NoneD. None None5. 下列代码的输出是什么?```pythonclass Person:def __init__(self, name, age): = nameself.age = agedef __str__(self):return f"{} is {self.age} years old."person = Person("Alice", 25)print(person)```A. Alice is 25 years old.B. Person object at 0xxxxC. NameError: name 'Alice' is not definedD. SyntaxError: invalid syntax6. 下列哪个选项是正确的?A. 类是对象的实例B. 对象是类的实例C. 类和对象是完全相同的概念D. 类和对象没有区别7. 在 Python 中,下列关于继承的说法哪个是正确的?A. 子类可以继承父类的私有成员B. 子类可以继承父类的特殊成员C. 子类可以继承父类的静态成员D. 子类不能继承父类的成员8. 下列代码的输出是什么?```pythonclass A:def __init__(self):self.x = 1class B(A):def __init__(self):super().__init__()self.y = 2obj = B()print(obj.x, obj.y)```B. 2 1C. NameError: name 'x' is not definedD. AttributeError: 'B' object has no attribute 'x'9. 下列哪个选项是正确的?A. 实例变量属于类,类变量属于实例B. 类变量属于类,实例变量属于实例C. 实例变量和类变量在使用上没有区别D. 类变量和实例变量在使用上没有区别10. 下列代码的输出是什么?```pythonclass A:x = 1class B(A):passclass C(A):passB.x = 10print(A.x, B.x, C.x)```A. 5 10 1B. 1 10 5C. 5 1 1D. 1 10 1011. 下列代码的输出是什么?```pythonclass A:def __init__(self):self.x = 1a = A()a.x = 5del a.xprint(a.x)```A. 5B. 1C. AttributeError: 'A' object has no attribute 'x'D. SyntaxError: invalid syntax12. 下列哪个选项是正确的?A. Python 中所有的变量都是私有的B. Python 中所有的变量都是公有的C. Python 中不存在私有变量和公有变量的概念D. Python 中的变量可以根据需要设置为私有或公有13. 下列代码的输出是什么?```pythonclass A:def __init__(self):self.__x = 1a = A()print(a.__x)```A. 1B. AttributeError: 'A' object has no attribute '__x'C. NameError: name '__x' is not definedD. 无法确定14. 下列哪个选项是正确的?A. 在 Python 中,可以通过类名直接访问私有变量B. 在 Python 中,可以通过实例名直接访问私有变量C. 在 Python 中,无法直接访问私有变量D. 在 Python 中,只能在类内部直接访问私有变量15. 下列代码的输出是什么?```pythonclass A:def __init__(self):self.__x = 1class B(A):def __init__(self):self.__x = 2b = B()print(b._A__x, b.__x)```A. 1 2B. 2 1C. AttributeError: 'B' object has no attribute '__x'D. AttributeError: 'A' object has no attribute '__x'16. 下列代码的输出是什么?```pythonclass A:def __init__(self):self.__x = 1class B(A):def __init__(self):super().__init__()self.__x = 2b = B()print(b._A__x, b.__x)```A. 1 2B. 2 1C. AttributeError: 'B' object has no attribute '__x'D. AttributeError: 'A' object has no attribute '__x'17. 下列哪个选项是正确的?A. 如果一个方法没有返回值,它默认返回 NoneB. 如果一个方法没有返回值,它默认返回 0C. 如果一个方法没有返回值,它不会返回任何东西D. 方法没有返回值是不合法的18. 下列代码的输出是什么?```pythonclass A:def show(self):print("A")class B(A):def show(self):print("B")b = B()b.show()```A. AB. BC. ABD. AttributeError: 'B' object has no attribute 'show'19. 下列代码的输出是什么?```pythonclass A:def __init__(self, x): self.x = xdef show(self):print(self.x)class B(A):def __init__(self, x, y): super().__init__(x) self.y = ydef show(self):print(self.y)b = B(10, 20)b.show()```A. 10B. 20C. 10 20D. 20 1020. 下列哪个选项是正确的?A. 多重继承在 Python 中是不允许的B. 在多重继承的情况下,子类会继承所有父类的成员C. 在多重继承的情况下,子类会优先继承第一个父类的成员D. 在多重继承的情况下,子类会优先继承最后一个父类的成员21. 下列代码的输出是什么?```pythonclass A:def __init__(self):self.x = 1class B(A):def __init__(self):super().__init__()self.y = 2class C(A):def __init__(self):super().__init__()self.z = 3class D(B, C):def __init__(self):super().__init__()d = D()print(d.x, d.y, d.z)```A. 1 2 3B. 1 3 2C. 2 1 3D. 2 3 122. 下列代码的输出是什么?```pythonclass A:def __init__(self, x):self.x = xdef show(self):print(self.x)class B(A):def __init__(self, x, y):super().__init__(x)self.y = ydef show(self):super().show()print(self.y)b = B(10, 20)b.show()```A. 10 20B. 20 10C. 1020D. 201023. 下列代码的输出是什么?```pythonclass A:def show(self):print("A")class B:def show(self):print("B")class C(A, B):passc = C()c.show()```A. AB. BC. ABD. TypeError: Cannot create a consistent method resolution24. 下列代码的输出是什么?```pythonclass A:def __init__(self, x):self.x = xdef show(self):print(self.x)class B(A):def __init__(self, x, y): super().__init__(x)self.y = ydef show(self):super().show()print(self.y)class C(A):def __init__(self, x, z): super().__init__(x)self.z = zdef show(self):super().show()print(self.z)class D(B, C):def __init__(self, x, y, z):B.__init__(self, x, y)C.__init__(self, x, z)d = D(10, 20, 30)d.show()```A. 10 20 30B. 10 30 20C. 20 10 30D. 20 30 1025. 下列哪个选项是正确的?A. 在 Python 中,类的方法可以被重载B. 在 Python 中,类的方法不允许重载C. 在 Python 中,重载是指对一个类的成员变量进行重新定义D. 在 Python 中,重载是指对一个类的方法进行重新定义26. 下列哪个选项是正确的?A. 在 Python 中,类的方法可以被重写B. 在 Python 中,类的方法不允许重写C. 在 Python 中,重写是指对一个类的成员变量进行重新定义D. 在 Python 中,重写是指对一个类的方法进行重新定义27. 下列哪个选项是正确的?A. 在 Python 中,类的方法可以被覆盖B. 在 Python 中,类的方法不允许被覆盖C. 在 Python 中,覆盖是指对一个类的成员变量进行重新定义D. 在 Python 中,覆盖是指对一个类的方法进行重新定义28. 下列代码的输出是什么?```pythonclass A:def show(self):print("A")class B(A):def show(self):super().show()b = B()b.show()```A. AB. AttributeError: 'super' object has no attribute 'show'C. TypeError: show() missing 1 required positional argument: 'self'D. TypeError: 'NoneType' object is not callable29. 下列哪个选项是正确的?A. 在 Python 中,类只能继承一个父类B. 在 Python 中,类可以同时继承多个父类C. 在 Python 中,类不能进行继承D. 在 Python 中,类只能被一个子类继承30. 下列代码的输出是什么?```pythonclass A:def show(self):print("A")class B:def show(self):print("B")class C(A, B):def display(self):self.show()c = C()c.display()```A. AttributeError: 'C' object has no attribute 'show'B. AC. BD. TypeError: Cannot create a consistent method resolution二、Python 类和对象选择题答案解析1. B. \_\_doc\_\_类的 \_\_doc\_\_ 类变量用于存储类的文档字符串。
第八章类和对象

第八章类和对象一、选择题1. 下列特性中,C与C++共有的是()A. 继承B. 封装C. 多态性D. 函数定义不能嵌套2. 一般情况下,将()函数说明为内联函数。
A. 函数的代码量小,调用次数少B. 函数的代码量小,调用次数多C. 函数的代码量大,调用次数少D. 函数的代码量大,调用次数多3. 不能作为函数重载判断依据的是()A. 返回类型B. constC. 参数个数D. 参数类型4. 下列说法中正确的是()A. 在函数参数定义中可以使用const说明符,其值在函数体内不可改变B. 在函数参数定义中可以使用const说明符,但必须指定缺省值C. 在函数参数定义中可以使用const说明符,但只能有一个参数使用constD. 在函数参数定义中不可以使用const说明符5. 已知函数float fun(float)是类A的成员函数,fp是指向该函数类型的指针,但fp不是类A的成员,则下列操作正确的是()A. fp=fun;B. fp=fp(3.5);C. fp=A::fun;D. p=A::fun(3.5);6. f()函数是类的一个常成员函数,它有一个int型参数,并且返回类型为int。
下列对该常成员函数进行声明的选项中,正确的是()A. int f(int)const;B. const int f(int);C. int f(const int);D. const int f(const int);7. C++提供的可有效分配对象空间的运算符是()A. deleteB. newC. posD. auto8. 下面关于new运算符的描述中错误的是()A. 使用new创建对象时必须定义初始值B. 使用new创建对象时会调用类的构造函数C. new可以用来动态创建对象和对象数组D. 使用new创建的对象可以使用delete删除9. 关于new的描述中,正确的是()A. new是分配内存空间的函数B. new可以分配对象空间C. new分配的内存空间可用free撤销D. new分配数组的同时可对数组初始化10. 在C++中用类将数据和对数据操作的代码连接在一起称为()A. 软件重用B. 封装C. 集合D. 多态11不属于类的成员函数的是()A. 构造函数B. 析构函数C. 友元函数D. 复制构造函数12. 在面向对象的程序设计中,首先需要在问题域中识别出若干个()A. 函数B. 类C. 文件D. 过程13. 假设MyClass是一个类,则该类的拷贝初始化构造函数的声明语句为()A. MyClass&(MyClass x);B. MyClass(MyClass x);C. MyClass(MyClass &x);D. MyClass(MyClass *x);14. 对于C++结构中定义的成员,其隐含的访问权限为()A. publicB. protectedC. privateD. static15. 为类提供对外接口的是()A. 公有成员函数B. 私有成员函数C. 保护成员函数D. 友元函数16. 对于任意一个类,析构函数的个数最多为()A. 0B. 1C. 2D. 317. 若类A的构造函数定义为A(int aa=1, int bb=0) { a = aa; b = bb; }则执行:A x(4);后,x.a和x.b的值分别是()A. 1,0B. 1,4C. 4,0D. 4,118. 若类A被说明成类B的友元,则()A. 类A的成员即类B的成员B. 类B的成员即类A的成员C. 类A的成员函数不能访问类B的成员D. 类B不一定是类A的友元19. 已知类A中的一个成员函数说明为void fun(A &a);,则A &a的含义是()A. 将a的地址值赋给变量funB. 指向类A的指针为aC. a是类A的对象引用,用来做函数fun()的形参D. 变量A与a按位相与运算后作为函数fun()的参数20. 友元的作用是()A. 提高成员的运行效率B. 加强类的封装性C. 实现数据的隐藏性D. 增加成员函数的种类21. 析构函数的特征是()A. 类只能定义一个析构函数B. 析构函数名与类名不同C. 析构函数的定义只能在类体内D. 析构函数可以有一个或多个参数22. 不能作为类成员的是()A. 自身类对象的指针B. 自身类的对象C. 自身类对象的引用D. 另一个类的对象23. 通常的拷贝初始化构造函数的参数是()A. 对象名B. 对象的成员名C. 对象的引用名D. 对象的指针名24. 不是构造函数特征的是()A. 构造函数的函数名与类名相同B. 构造函数可以重载C. 构造函数可以设置默认参数D. 构造函数必须指定类型说明25. 属于类的内部实现的是()A. 公有成员B. 私有成员C. 保护成员D. 友元26. 关于成员函数特征的下述描述中错误的是()A. 成员函数一定是内联函数B. 成员函数可以重载C. 成员函数可以设置参数的缺省值D. 成员函数可以是静态的27. 下列关于静态数据成员的特性描述中错误的是()A. 说明静态数据成员时前边要加staticB. 静态数据成员要在类体外进行初始化C. 引用静态数据成员时,要在静态数据成员名前加“类名”和作用域运算符D. 静态数据成员不是所有对象所共用的28. 关于具有转换函数功能的构造函数说法中正确的是()A. 不带参数的构造函数B. 带有一个参数的构造函数C. 至少带有二个参数的构造函数D. 缺省构造函数29. 对重载函数的描述中,错误的是()A. 重载函数中不允许使用缺省参数B. 重载函数中编译系统根据参数表进行选择C. 不要使用重载函数来描述毫无相干的函数D. 构造函数重载将会给初始化带来多种方式30. 在面向对象的程序中,不属于对象特点的是()A. 多态性B. 抽象性C. 封装性D. 继承性31. 在C++中,类是一种()A. 自定义函数B. 头文件C. 自定义数据类型D. 控制结构32. C++类成员的缺省访问属性是()A. protectedB. privateC. publicD. friend33. 面向对象程序设计将数据和()放在一起,作为一个相互依存、不可分割的整体来处理。
类与对象练习题

C++类与对象习题一.问答题1.解释public和private的作用,公有类型成员与私有类型成员有什么区别?2.Protected 关键字有何作用?3.构造函数和析构函数有什么作用?二.选择题1.不是构造函数的特征()。
A. 构造函数的函数名与类名相同。
B. 构造函数可以重载。
C.构造函数可以设置缺省参数。
D.构造函数必须指定类型说明。
2.是析构函数的特征()。
A. 析构函数名与类名不同。
B. 析构函数的定义只能在类体内。
C.析构函数可以有一个或多个参数。
D.一个类中只能定义一个析构函数。
3.关于成员函数的特征的描述中,()是错误的。
A. 成员函数一定是内联函数。
B. 成员函数可以重载。
C.成员函数可以设置缺省参数。
D.成员函数可以是静态的。
4.由于常对象不能被更新,因此_________A.通过常对象可以调用任何不改变对象值的成员函数B.通过常对象只能调用它的常成员函数C.通过常对象只能调用静态成员函数D.常对象的成员都是常成员5 .下列对函数的缺省参数的定义和描述及对函数的调用中错误的为______.A. void show(char *text, int length=-1,int color=0);B. int getcolor(int pal);void show(char *text,int length=-1,int color=getcolor(pal));C.在设置了函数的缺省参数后,调用函数的对应实参就可以省略。
D. show(“how are you!”, ,);6.下列有关静态成员的叙述中,_______是正确的。
A、静态数据成员不是所有对象所共享的B、在类中声明静态数据成员时可以进行初始化C、静态成员函数只能访问类的静态成员D、非静态成员函数不能访问类的静态成员1.7.下面对引用的描述中是错误的。
A. 引用是某个变量或对象的别名B. 建立引用时,要对它初始化C. 对引用初始化可以使用任意类型的变量D.引用与被引用的变量是同一个地址。
C++习题第06章 类和对象

第06章类和对象1.填空题(1)类和对象是面向对象程序设计的两个最本概念,__表示抽象的概念,而__则是__的实例化。
(2)类的成员包括__和__两类。
(3)类的数据成员__在类的定义时进行初始化。
(能/不能)(4)类成员的访问方式包括__、__和__3种,默认的访问方式是__。
(5)类的__是为类的所有对象所共有的。
(6)类中声明友元的关键是__。
(7)在类的外部定义成员函数时应在函数的前面加上__和__。
(8)访问对象的成员有__、__和__3种格式。
(9)__函数和__函数是类的两种特殊的成员函数。
__函数负责完成对象的创建和初始化工作,__函数负责完成对象消失时的内存清理工作。
(10)类的__成员和__成员需要初始化表的方式提供初值。
(11)类的静态数据成员的初始化应该写在__区域上,而且要指明__和__。
(12)常对象只能调用类中的__函数,该函数为类的__函数。
(13)类的私有成员和保护成员只能被该类的__函数和__函数访问。
(14)C++中的类的成员指针有__指针和__指针。
(15)类的每一个成员函数都有一个隐含定义的指针,称为__指针,它的类型是成员函数所属类的类型。
(16)对象之间成员级的拷贝,称为__,可以采用默认的拷贝的构造函数。
2.选择题(1)下列关于和对象的描述上,不正确的是()。
(A)一个对象只能属于一个类。
(B)对象是类的一个实例。
(C)一个类只能有一个对象。
(D)类和对象的关系与数据类型和变量的关系类似。
(2)若有如下类声明:class A{int a;}则A类的成员a是()。
(A)公有数据成员(B)公有的成员函数(C)私有数据成员(D)私有成员函数(3)下列关于成员函数的描述中,不正确的是()。
(A)成员函数可以重载。
(B)成员函数一定是内联函数(C)成员函数可以是静态的(D)成员函数可以设置参数的默认值(4)在类外定义成员函数时,需要在函数名前加上()。
(A)对象名(B)类名(C)类名和作用域运算符(D)作用域运算符(5)下列关于this指针的描述中,正确的是()。
python 类与对象 选择题

Python 类与对象选择题一、单选题1. 在Python中,类的构造方法是使用以下哪个关键字定义的?A. defB. classC. initD. constructor2. 下列关于类的描述中,哪个是正确的?A. 类是对象的实例B. 类是对象的模板C. 类实例化后可以直接调用类方法D. 类不能继承其他类3. 在Python中,下列关于self的描述中,哪个是正确的?A. self是指向类本身的指针B. self是指向对象本身的指针C. self是Python中的保留关键字D. self是用来调用其他对象的方法4. 在Python中,以下哪个语句可以创建一个对象?A. new()B. create()C. make()D. 实例化时调用类的构造方法5. 下列关于继承的描述中,哪个是正确的?A. 子类可以继承父类的属性和方法B. 父类可以继承子类的属性和方法C. 子类不能重写父类的方法D. 多重继承是Python中的特性之一6. 在Python中,下列关于多态的描述中,哪个是正确的?A. 多态是指对象可以同时具有多种不同的状态B. 多态是指可以在不同的类中使用相同的方法名C. 多态是指可以在不同的类中使用相同的属性名D. 多态是指可以在同一个类中重写父类的方法7. 在Python中,以下哪个关键字可以用来判断一个对象是否是某个类的实例?A. thisB. isinstance()C. type()D. object()8. 下列哪种情况不适合使用面向对象的方法来解决问题?A. 当问题涉及多个实体之间的复杂关系B. 当问题可以被抽象为一个对象的行为和属性C. 当问题具有明确的层次结构D. 当问题需要处理大量的数据和算法二、多选题1. 在Python中,以下哪些方法是对象的特殊方法(魔术方法)?A. __init__B. __new__C. __add__D. __str__2. 以下关于封装的描述中,哪些是正确的?A. 封装是指将数据及操作封装到一个类中B. 封装是指使用私有属性和方法来保护对象的数据C. 封装是指将一个对象的方法和属性隐藏起来,不被外部访问D. 封装是面向对象编程中最基本的特性之一3. 在Python中,下列哪些关键字可以用来创建类方法和静态方法?A. classmethodB. staticmethodC. defD. classmethod4. 以下哪些是类的继承方式?A. 单继承B. 多继承C. 接口继承D. 重载继承5. 下列关于多态的描述中,哪些是正确的?A. 多态是指可以在不同的类中具有相同的方法名B. 多态是指可以在同一个类中重写父类的方法C. 多态是指可以在不同的类中使用相同的属性名D. 多态是面向对象编程中的一种核心概念6. 在Python中,以下哪些方法是用来实现运算符重载的?A. __add__B. __sub__C. __mul__D. __div__7. 对于私有属性和方法,以下哪些描述是正确的?A. 私有属性和方法可以在类的外部直接访问和修改B. 私有属性和方法可以通过在属性名称或方法名称前加上双下划线来定义C. 私有属性和方法可以通过在属性名称或方法名称前加上单下划线来定义D. 私有属性和方法可以通过在属性名称或方法名称前加上private来定义三、判断题1. 在Python中,类是一种数据类型,可以赋值给变量和作为参数传递。
JAVA基础 第3章类与对象_练习题

第3章类与对象一.选择题1.下列不属于面向对象编程的特性是(D)。
A.封装性 B. 继承性 C. 多态性 D. 编译执行2.下列类的声明中不合法的是(C)。
A. class People{…}B. class 植物{…}C. Class A{…}D. public class 共有类{…3.下列方法的声明中不合法的是(C)。
A. float area(){…}B. void area(){…}C. double area(d){…}D. int area(int r){…}4. 下列构造方法(构造器)的调用中正确的是(C)。
A. 按照一般的方法调用B. 由用户直接调用C. 只能通过new自动调用D. 被系统调用5.下列程序运行的结果是(A)。
class Book{int width;int length;}public class A{static void f(Book p){p.width=20;p.length=40;}public static void main(String args[]){Book b=new Book();b.width=10;b.length=20;f(b);System.out.print(" "+b.width);System.out.print(" "+b.length);}}A. 20 40B. 10 40C. 10 20D. 以上都不对6.下列程序运行的结果是(D)。
public class A{static void f(int y){y=y+10;}public static void main(String args[]){double x=10;f(x);System.out.println(x);}}精选文库A. 10B. 20C. 10.0D. 程序编译错误7.下列程序运行的结果是(C)。
public class A{int z=20;static void f(int y){y=z;System.out.println(y);}public static void main(String args[]){f(10);}}A. 10B. 20C. 程序编译错误D. 以上都不对8. 以下代码的输出结果为(C)。
选择题(类与对象)

一1:下列有关类的说法不正确的是()。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。
2:下面()项是对构造函数和析构函数的正确定义。
A.void X::X(), void X::~X()B.X::X(参数), X::~X()C.X::X(参数), X::~X(参数)D.void X::X(参数), void X::~X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。
3:()的功能是对象进行初始化。
A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数答案:C分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作;4:下列表达方式正确的是()。
A.class P{ B. class P{public: public:int x=15; int x;void show(){cout<<x;} void show(){cout<<x;}}; }C. class P{ D. class P{int f; public:}; int a;f=25; void Seta (int x) {a=x;}答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。
5:拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。
12-4类与对象练习题面向对象 (1)

A)成员函数一定是内联函数B)成员函数可以重载
C)成员函数可以设置参数的默认值D)成员函数可以是静态的
14. C++中对于结构中定义的成员,其默认的访问权限为()。
A)publicB)protectedC)privateD) static
15.为了使类中的成员不被类的对象通过成员操作符来访问,则不能把该成员的访问权限设置为()。
A、对象是类的一个实例
B、任何一个对象只能属于某个的类
C、一个类只能有一个对象
D、类与对象的关系和数据类型与变量的关系相似
3、下列关于构造函数的描述中,错误的是()。
A、构造函数可以设置默认参数
B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数
D、构造函数不可以重载
4、下列有关析构函数的说法中,()是错误的。
a.disp( );
return0;
}
该程序运行后的输出结果是()。
A)displB)disp2C)displdisp2D)程序编译时出错
24.若有以下程序:
#include<iostream.h>
classsample
{inti;
public:
voidsetvalue(intm){i=m;}
voidfun(intm){i+=m;}
staticints;
voiddis()
{
cout<<s<<endl;
}
};
intsample::s=0;
voidmain(){
samplea(2),b(5),c(a);
a.add();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1:下列有关类的说法不正确的是()。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。
2:下面()项是对构造函数和析构函数的正确定义。
A.void X::X(), void X::~X()B.X::X(参数), X::~X()C.X::X(参数), X::~X(参数)D.void X::X(参数), void X::~X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。
3:()的功能是对象进行初始化。
A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数答案:C分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作;4:下列表达方式正确的是()。
A.class P{ B. class P{public: public:int x=15; int x;void show(){cout<<x;} void show(){cout<<x;}}; }C. class P{ D. class P{int f; public:}; int a;f=25; void Seta (int x) {a=x;}答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。
5:拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。
6:关于静态成员的描述中,()是错误的。
A.静态成员可分为静态数据成员和静态成员函数B.静态数据成员定义后必须在类体内进行初始化C.静态数据成员初始化不使用其构造函数D.静态数据成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。
7:关于友元的描述中,()是错误的。
A.友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员C.友元函数破坏封装性,使用时尽量少用D.友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。
8对类的构造函数和析构函数描述正确的是()。
A. 构造函数可以重载,析构函数不能重载B. 构造函数不能重载,析构函数可以重载C. 构造函数可以重载,析构函数也可以重载D. 构造函数不能重载,析构函数也不能重载答案:A9类的析构函数的作用是( D )。
A.一般成员函数B.类的初始化C.对象初始化D.删除对象答案:D10假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。
(OneClass p); B. OneClass& (OneClass p);C. OneClass(OneClass & p);D. OneClass (OneClass *p);答案:C11下面对于友元函数描述正确的是()。
A.友元函数的实现必须在类的内部定义B.友元函数是类的成员C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员答案:C12对于结构中定义的成员,其默认的访问权限为()。
B. protected D. static答案:C13为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。
B. protected D. static答案:A14下面对静态数据成员的描述中,正确的是()。
A.静态数据成员可以在类体内进行初始化B.静态数据成员不可以在类体内进行初始化C.静态数据成员不能受private控制符的作用D.静态数据成员可以直接用类名调用答案:C15下面对静态数据成员的描述中,正确的是()。
A.静态数据成员是类的所有对象共享的数据B.类的每一个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用答案:A16下面对于析构函数的描述中不正确的是()。
A、析构函数是内置函数B、析构函数与类名相同C、析构函数不能有参数D、析构函数在对象撤销时自动执行答案:B二1. 下列的各类函数中,不是类的成员函数。
( C )A) 构造函数 B) 析构函数 C) 友元函数 D) 拷贝初始化构造函数注:可做友元的函数有普通函数和其它类的函数,所以不是本类内的成员函数。
2. 作用域运算符“::”的功能是。
( D )A) 标识作用域的级别的 B) 指出作用域的范围的C) 给定作用域的大小的 D) 标识成员是属于哪个类的注:“::”左边一般为类名,右边一般为成员变量和成员函数,它的功能就是标识是属于哪个类的;如果左边什么都不加,表示全局变量。
3. 下列选项中,是不正确的。
( B )A) 名空间是为了支持大规模程序的逻辑设计、排解名字冲突应运而生的B) 名空间定义的关键词为typenameC) 名空间定义的关键词为namespaceD) 因为程序是跨文件的,所以名空间也是跨文件的4. 是析构函数的特征。
( A )A) 一个类中只能定义一个析构函数 B) 析构函数名与类名不同C) 析构函数的定义只能在类体内 D) 析构函数可以有一个或多个参数5. 下述静态数据成员的特性中,是错误的。
( D )A) 说明静态数据成员时前边要加修饰符staticB) 静态数据成员要在类体外进行初始化C) 引用静态数据成员时,要在静态数据成员前加<类名>和作用域运算符D) 静态数据成员不是所有对象所共用的注:静态成员都是隶属于类的,是所有同类对象共享的6. 已知fl(int)是类A的公有成员函数,P是指向成员函数f1()的指针,采用是正确的。
( B )A) p=fl; B) P=A::f1; C) P=A::fl(); D) P=f1();注:指向普通函数的指针int max(int a, int b){…}int (*p)(int, int); p=max;指向类中公有函数的指针的赋值与上相同指针名=类名::函数名,即 p=A::max;7. 友元关系不能( C )A) 是类是与类的关系 B) 是一个类成员函数与另一个类的关系C) 继承 D) 提高程序的运行效率注:友元关系可是一个类与另一个类的关系,也可以是一个类成员函数与另一个类的关系;利用友元的主要目的是提高程序的运行效率,通过友元访问类的私有数据(如同生活中通过人际关系得到内部消息或受益等)。
友元关系是不继承的。
例:刘鹏是黄涛的朋友,可以分享黄涛的小秘密,但刘鹏不一定是黄小涛(假如黄小涛是黄涛的儿子)的朋友,不一定能分享黄涛儿子的小秘密。
8. 下列关于对象数组的描述中,是错的。
( D )A) 对象数组的下标是从0开始的 B) 对象数组的数组名是一个常量指针C) 对象数组的每个元素是同一个类的对象D) 对象数组只能赋初值,而不能被赋值9. 下列说明中const char *ptr; ptr应该是( C )A) 指向字符常量的指针 B) 指向字符的常量指针C) 指向字符串常量的指针 D) 指向字符串的常量指针注:使用const修饰指针时,由于const的位置不同,而含意不同。
下面定义的一个指向字符串的常量指针:char * const prt1 = stringprt1; 已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,是正确的。
( A )A) void print()const; B) const void print();C) void const print(): D) void print(const);11. 关于new运算符的下列描述中,是错的。
( D )A) 它可以用来动态创建对象和对象数组B) 使用它创建的对象或对象数组可以使用运算符delete删除C) 使用它创建对象时要调用构造函数D) 使用它创建对象数组时必须指定初始值注:用new创建对象数组时会自动调用无参的构造函数(或者有缺省值的构造函数)例:Point *p = new Point[10]; 会调用10次无参的构造函数12. 具有转换函数功能的构造函数,应该是。
( B )A) 不带参数的构造函数 B)带有一个参数的构造函数C) 带有两个以上参数的构造函数 D) 缺省构造函数注:构造函数可以将普通类型转换为对象#include#includeusing namespace std;class Example{public:Example(int va=0);void print();private:int a;};Example::Example(int va){ cout<<"Example(int va)..."<< a="va;">void Example::print(){ cout<<"a="<<>void main(){Example ee; .Example(int va)...a=3大家可以思考一下,析构函数调用了几次,分别在什么时候调用。