类和对象、构造函数和析构函数单元测验
测验1
一、单选题1.每个类()构造函数A. 只能有一个B. 只可有私有的C. 可以有多个D. 只可有缺省的2.已知类A中的一个成员函数的说明如下:void Set(A &a);则该函数的参数“A &a”的含义是( )A. 指向A的指针为aB. 将变量a的地址赋给类AC. 类A对象引用a用作函数的形参D. 变量A与a按位与后作函数参数3.假定AB为一个类,则执行AB x;语句时将自动调用该类的( )A. 有参构造函数B. 无参构造函数C. 拷贝构造函数D. 赋值构造函数4.拷贝(复制)构造函数的作用是A. 进行数据类型的转换B. 用对象调用成员函数C. 用对象初始化对象D. 用一般类型的数据初始化对象5.下列关于析构函数的描述中,错误的是( )A. 类中有且仅有一个析构函数B. 析构函数可以有形参C. 析构函数没有函数类型D. 析构函数在对象消失时被自动执行6.下列对类的构造函数和析构函数的描述中,正确的是( )A. 构造函数可以重载,析构函数不能B. 构造函数不能重载,析构函数可以C. 构造函数可以重载,析构函数也可以重载D. 构造函数不能重载,析构函数也不能重载7.假定MyClass为一个类,那么下列的函数说明中,( )为该类的析构函数.A. void ~MyClass();B. ~MyClass(int n);C. MyClass();D. ~MyClass();8.为了使类中的成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为A. publicB. protectedC. privateD. static9.下列对与拷贝构造函数的描述中,正确的( )A. 在C++中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数B. 必须为每个类定义拷贝初始化构造函数C. 如果要使用拷贝构造函数,则必须在类中显示进行定义D. 定义拷贝构造函数则无须定义构造函数10.对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句(划线处)应该是( )class MyClass{public:MyClass(int x){n=x;}void SetValue(int n1){n=n1;}private:int n;};int f(){MyClass *ptr=new MyClass(45);__________;}A. MyClass(50)B. SetValue(50)C. ptr - > SetValue(50)D. ptr - > n=50二、填空题1. ______运算符对指定类型对象动态分配内存并返回该类型的指针。
C++语言选择题40道:C++类和对象.Tex
C++类与对象选择题1.C++中,什么是类的构造函数?o A. 用于初始化类的对象的函数o B. 用于删除类的对象的函数o C. 用于实现类的方法的函数o D. 用于返回类的属性的函数答案: A解析: 构造函数在创建类的实例时被调用,用于初始化该实例的成员变量。
2.在C++中,如果一个类没有显式定义构造函数,编译器会自动提供哪种构造函数?o A. 带参数的构造函数o B. 析构函数o C. 默认构造函数o D. 复制构造函数答案: C解析: 如果一个类未定义任何构造函数,编译器会自动生成一个默认构造函数。
3.C++中的析构函数有何特殊性?o A. 同时有多个析构函数o B. 可以有参数o C. 每个类必须定义一个析构函数o D. 当对象生命周期结束时自动调用答案: D解析: 析构函数在对象生命周期结束时自动调用,用于释放资源和进行清理工作。
4.下列哪个成员函数可以被重载?o A. 构造函数o B. 析构函数o C. 拷贝构造函数o D. 赋值运算符答案: A解析: 构造函数可以被重载以适应不同的初始化需求,而析构函数、拷贝构造函数和赋值运算符不能被重载。
5.C++中成员函数的定义可以位于哪里?o A. 类的定义内o B. 类的定义外,但需要在类定义中声明o C. 只能在main函数中o D. 任意位置,只要在使用前声明答案: B解析: 成员函数可以在类定义内定义,但更常见的是在类定义外定义,只需在类定义中进行声明。
6.C++类的成员变量默认的访问限定符是什么?o A. publico B. protectedo C. privateo D. static答案: C解析: 如果没有指定访问限定符,成员变量默认为private。
7.如果一个类的对象被声明为另一个类的成员变量,这被称为?o A. 继承o B. 封装o C. 组合o D. 多态答案: C解析: 将一个类的对象作为另一个类的成员变量,这体现了组合的概念。
C++(练习)第6章,类与对象-推荐下载
22. 下列对类的构造函数和析构函数的描述中,正确的是 A 构造函数可以重载,析构函数不能重载 B 构造函数不能重载,析构函数可以重载 C 构造函数可以重载,析构函数也可以重载 D 构造函数不能重载,析构函数也不能重载
7. 类的概念是(
A 对象的抽象。
B 同一类记录的集合。
C 同一类数据的集合。
D 所有对象的集合。Βιβλιοθήκη 参考答案A)。
C++(测试)第 6 章,类与对象.doc
8. 如果没有显式定义构造函数(包括复制构造函数),C++编译器就(
A 出现编译错误
B 没有构造函数
C 必须显示定义
D 隐式定义默认的构造函数
参考答案
)为该类的析构函数。
)。
A
5. 一个类的友元函数能够访问该类的__________。 A 私有成员 B 保护成员 C 公有成员 D 所有成员 参考答案 D
6. 下列关于 C++语言类的描述中错误的是__________。 A 类用于描述事物的属性和对事物的操作 B 类与类之间通过封装而具有明确的独立性 C 类与类之间必须是平等的关系,而不能组成层次结构 D 类与类之间可以通过一些方法进行通信和联络 参考答案 C
13. 一个类的友元函数能够访问该类的( )。 A 私有成员 B 保护成员 C 公有成员 D 所有成员 参考答案 D
14. 有关类与对象的说法不正确的是( )。 A 类是同类对象的定义 B 对象是类的具体化实例 C 类包含对象的具体属性值 D 类包含同类对象的属性名 参考答案 C
【习题】类和对象(3)
类和对象(3)
【实验目的】:
1.掌握类的构造函数和析构函数的使用方法。
2.掌握类的拷贝构造函数的使用方法。
3.掌握常对象和常对象成员的使用方法。
4.掌握友元函数的使用方法。
5.掌握友元类的使用方法。
6.掌握静态数据成员和静态成员函数的定义方法。
【实验内容】:
1.完成教材P116~119习题1~12。
一、构造函数可用于对象的初始化操作,当对象调用类时,就自动力调用了构造函
数,构造函数可以自定义,也可以默认。
析构函数是释放对象调用的内存空间。
构造函数可以是多个,析构函数一至少只
有一个。
二、
三、
四、
五、
七、(2)
(3)
(4)
(5)
八、
九、
十
十一
十二
2.编写一个圆类,声明一个静态数据成员和静态函数,静态数据成员表示圆的个数,
定义对象时构造函数把静态数据成员加1,析构时静态数据成员减1。
静态成员函
数用来显示静态数据成员。
的距离。
totalWeight()为外部函数,计算两者的重量和。
不需要写出main函数。
5.给以下程序加上注释,并分析程序执行结果。
6. 分析以下程序是否能正确执行?如果不能正确执行,请分析原因,并修改程序。
【实验体会】:。
选择题(类与对象)
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分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。
C自测题(ANSWER)
C自测题(ANSWER)一. 选择(共50题,共1分)1. 下列关于类和对象的叙述中,错误的是( )A.一个类只能有一个对象B.对象是类的具体实例C.类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系2. 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的( )。
A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.任何权限的成员3. 类中定义的成员默认为( )访问属性。
A.publicB.privateC.protectedD.friend4. 一个类的友元不是该类的成员,与该类的关系密切,所以它(D )。
A.有this指针,有默认操作的对象B.没有this指针,可以有默认操作的对象C.有this指针,不能执行默认操作D.没有this指针,也就没有默认操作的对象5. 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。
A.x.aB.x.a()C.x->GetValue()D.x.GetValue()6. 对于任一个类,用户所能定义的构造函数的个数至多为( )。
A.0B.1C.2D.任意个7. 一个类的析构函数通常被定义为该类的( )成员。
A.私有B.保护C.公用D.友元8. 有如下类声明:class Foo {int bar; };则Foo类的成员bar 是()A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数9. 关于封装,下列说法中不正确的是( )。
A.通过封装,对象的全部属性和操作结合在一起,形成一个整体B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)C.通过封装,每个对象都成为相对独立的实体D.通过封装,对象的属性都是不可见的10. 假定AB为一个类,则执行“AB *s=new AB(a,5);”语句时得到的一个动态对象为( )。
模块6 类与对象(1)
一、选择1. 以下不属于类存取权限是_______B___。
A. publicB. staticC. protectedD. private2. _____D___是不可以作为该类的成员。
A.自身类对象的指针B.自身类的对象C.自身类对象的引用D.另一个类的对象3. 有关类的说法不正确的是___D____。
A. 类是一个用户自定义的数据类型B. 只有类中的成员函数才能存取类中的私有数据C. 在类中,如果不作特别说明,所有的数据均为私有类型D. 在类中,如果不作特别说明,所有的成员函数均为公有类型4. 有关类和对象的说法下列不正确的有__________。
A. 对象是类的一个实例B. 任何一个对象只能属于一个具体的类C. 一个类只能有一个对象D. 类与对象和关系和数据类型和变量的关系相似5. 若Queue是类,aQueue 是它的一个对象,p1是类对象aQueue的一个指针,那么对象aQueue可以通过_________ 类访问类的成员,类对象aQueue的指针p1可以通过________来访问类的成员。
A. ::B. .C. ;D. ->6. 关于成员函数特征,_______是错误的。
A. 成员函数一定是内联函数B. 成员函数可以重载C. 成员函数可以设置参数的默认值D. 成员函数可以是静态的7. 下列关键字中用以说明类中公有成员的是_____。
A. publicB. privateC. protectedD. friend8. 有关构造函数的说法不正确的是___________。
A. 构造函数的名字和类的名字一样;B. 构造函数在说明类的对象时自动执行;C. 构造函数无任何函数类型;D. 构造函数有且仅有一个;9. 在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用___________合适。
A. 内联函数B. 重载函数C. 递归函数D. 嵌套调用10. 关于引用,下列的说法中错误的是__________。
C++面向对象程序设计模拟试题5
C++面向对象程序设计模拟试题5C++面向对象程序设计模拟试题五一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中,只有一个是苻合题目要求的。
请将其代码填写在题后的括号内。
错选,多选或未选均无分。
1.下列对类的构造函数和析构函数描述正确的是()。
A)构造函数可以重载,析构函数不能重载B)构造函数不能重载,析构函数可以重载C)构造函数可以重载,析构函数可以重载D)构造函数不能重载,析构函数不能重载2.在函数定义前加上关键字“inline”,表示该函数被定义为()。
A)重载函数B)内联函数C)成员函数D)普通函数3.下面有关重载函数的说明中,()是正确的。
A) 重载函数必须具有不同的返回值类型B) 重载函数形参个数必须不同C) 重载函数一般具有不同的形参列表D) 重载函数名可以不同4.下列有关类与对象的说法中,( ) 是不正确的。
A) 对象是类的一个实列B) 任何一个对象只能属于一个具体的类C) 一个类只能有一个对象D) 类和对象的关糸和数椐类型与变量的关糸类似5.已知: Print( )函数是一个类的常成员函数,它无返回值,下列表示中,正确的是( )。
A)void Print( ) const;B) const void Print( );C) void const Print( );D) void Print(const)6.假定Myclass为一个类,那么下列的函数说明中( )为该类的析构函数。
A) void ~Myclass( ); B) ~Myclass( int n);C) Myclass( ); D) ~Myclass( )7.下面类的定义中有( ) 处错误。
class myclass{C. 保护数据成员D. 静态数据成员13.静态成员函数没有()。
A. 返回值B. this指针C. 指针参数D. 返回类型14.解决多重继承中二义性问题的方法有()。
A. 只能使用作用域分辨操作符B. 使用作用域分辨操作符或赋值兼容规则C. 使用作用域分辨操作符或虚基类D. 使用虚基类或赋值兼容规则15.如果在类CTest的外面的非成员函数中采用CTest::f()形式函数调用;则函数f( )是类CTest的()。
c语言单元测试一
∙在C#程序中,MyClass 为一个自定义的类,则下列语句执行后,MyClass[ , ]myArray = new MyClass[2][3];创建了多少个MyClass类的对象?()答案所选答案:6正确答案:6得 2 分,满分 2 分在C#程序中,变量openFileDialog 引用一个openFileDialog对象,为检查用户是否单击了“打开”按钮而退出该对话框,应检查()是否等于OpenFileDialog.OK.答案所选答案:OpenFileDialog.ShowDialog()的返回的值正确答案:OpenFileDialog.ShowDialog()的返回的值得 2 分,满分 2 分在定义虚方法时,应在类的方法前加关键字()。
答案所选答案:virtual正确答案:virtual得 2 分,满分 2 分在C#程序设计中,以下不能正确定义二维数组的是()答案所选答案:int A[] = new int[4,4];正确答案:int A[] = new int[4,4];得 2 分,满分 2 分在C#程序设计中,数据库访问 框架中的类主要位于()命名空间。
答案所选答案:System.Data正确答案:System.Data得 2 分,满分 2 分在为类中的数据成员定义时,不是对象所特有的数据成员称为静态成员,在类中用()修饰符声明。
答案所选答案:static正确答案:static得 2 分,满分 2 分在C#程序设计中,引用命名空间System的正确语句是()答案所选答案:using System;正确答案:using System;得 2 分,满分 2 分下列对定义重载函数的要求中,错误的是()答案所选答案:要求函数的返回值不同正确答案:要求函数的返回值不同得 2 分,满分 2 分在C#中,专门用于表示财务计算的类型是:()答案所选答案:Decimal正确答案:Decimal得 2 分,满分 2 分在C#语言中,名称空间的主要作用是:()答案所选答案:避免名称的冲突正确答案:避免名称的冲突得 2 分,满分 2 分在C#程序中,有数组pins的定义如下: int [ ] pins = new in t[4] {9,2,3,1}; 则元素pins[1]的值为( )答案所选答案:2正确答案:2得 2 分,满分 2 分在C#语言中,对类的构造函数和析构函数描述正确的是()答案所选答案:构造函数可以重载,析构函数不能重载正确答案:构造函数可以重载,析构函数不能重载得 2 分,满分 2 分C#中程序的入口方法名是()答案所选答案:Main正确答案:Main得 2 分,满分 2 分在有类的继承的程序中,有时会用到base关键字。
类和对象综合练习
类和对象综合练习一、单项选择题1、对类的构造函数和析构函数描述正确的是()。
A、构造函数可以重载,析构函数不能重载B、构造函数不能重载,析构函数可以重载C、构造函数可以重载,析构函数也可以重载D、构造函数不能重载,析构函数也不能重载2、类的析构函数的作用是()。
A、一般成员函数B、类的初始化C、对象的初始化D、删除对象3、假定MyClass为一个类,则该关的拷贝构造函数的声明语句为()。
A、MyClass&(MyClass x);B、MyClass(MyClass x);C、MyClass(MyClass &x);D、MyClass(MyClass *x);4、假定MyClass为一个类,则执行MyClass a, b(2), *p;语句时,自动调用构造函数()次。
A、2B、3C、4D、55、假定MyClass为一个类,则执行MyClass a[3], *p[2];语句时,自动调用该类构造函数()次。
A、2B、3C、4D、56、类MyClass的定义如下:class MyClass{public:MyClass( ){ value=0; }SetVariable(int i){ value=i; }private:int value; }; 则对下列语句序列正确的描述是()。
MyClass *p, my; p=&my;A、语句p=&my;是把对象my赋值给指针变量pB、语句MyClass *p, my;会调用两次类MyClass的构造函数C、对语句*p.SetVariable(5)的调用是正确的D、语句p->SetVariable(5)与语句my.SetVariable(5)是等价的7、类MyClass的定义如下:class MyClass{public:MyClass( ){ }MyClass(int i){ value=new int(0); }int *value; }; 若要对Value赋值,则下面语句正确的是()。
c++第6章-类和对象1-习题
c++第6章-类和对象1
-习题课
胡凤珠
6.1 判断题 × 1.使用class定义的类,其默认的访问权限是公有的,使用struct定义 的类,其默认的访问权限是私有的。 × 2.类中的成员函数都是公有的,数据成员都是私有的。 × 3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不 能是内联函数。 √ 4.类定义后,它的成员个数及名称就不会再被改变了。 × 5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。 如果类中没有定义任何构造函数时,就无法给定义的对象初始化。 √ 6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成 员函数是同类对象共享的。 √ 7.对象成员的表示方法与结构变量成员的表示方法相同。 √ 8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应 的构造函数时,系统会自动生成。 √ 9.构造函数是一个其名与类名相同的特殊的成员函数。 × 10.析构函数是一个函数体为空的成员函数。
#include <iostream.h> class Rectangle { public: Rectangle(int a,int b)//2个参数的构造函数Rectangle { width=a; length=b; }//负责对对象的宽和长数据成员初始化 int Area()//求矩形的面积 { return width*length; } int Periment()//求矩形的周长 { return 2*(width+length); } void Changesize(int a,int b)//改变矩形的宽和长 { width=a; length=b; } void Print();//负责打印求的的面积和周长 private: int width,length; }; void Rectangle::Print() { cout<<"AREA="<<Area()<<endl; cout<<"PERIMENT="<<Periment()<<endl; } void main() { Rectangle r(5,8);//定义对象r 初始化 r.Print(); r.Changesize(3,9);//调用对象r的成员函数Changesize改变宽和长 r.Print(); }
类与对象练习题
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.引用与被引用的变量是同一个地址。
第8、9章 类和对象补充习题(1)
第八、九章类和对象一、选择题1、下列有关类和对象的说法错误的是(C )。
A)类封装了数据和操作B)对象是类的实例C)一个类的对象只有一个D)一个对象必属于某个类2、类的对象可以访问类的( B )成员。
A)所有 B)public C)private D)protected3、创建一个类的对象时,系统自动调用()函数。
BA)成员 B)构造 C)析构 D)友元4、关于this指针的说法错误的是(A )。
A)this指针必须显式声明 B)this指针是隐式使用的C)类的非静态成员函数拥有this指针 D)静态成员函数不拥有this指针5、下面关于构造函数的描述不正确的是( B )。
A)系统可提供默认的构造函数 B)构造函数可以有参数,所以可以有返回值C)构造函数可以重载 D)构造函数可以设置默认参数6、下面关于析构函数的正确描述是( C )。
A)系统不提供默认的析构函数 B)析构函数必须由用户定义C)析构函数没有参数 D)析构函数可以设置默认参数7、对静态成员的不正确描述是( C )。
A)静态成员不属于对象,它是类的共享成员B)静态数据成员要在类外定义和初始化C)调用静态成员函数要通过类或对象,所以静态成员函数拥有this指针D)非静态成员函数也可以操作静态数据成员8、下面对友元的描述错误的是( D )。
A)关键字friend用于声明友元B)一个类的成员函数可以是另一个类的友元C)友元函数访问对象的成员不受访问特性影响D)友元函数通过this指针访问对象成员9、类的成员函数可以访问类的( A )数据成员。
A)所有 B)public C)private D)protected10、编译系统自动为一个类生成默认构造函数的条件是(A )。
A)该类没有定义任何构造函数B)该类没有定义任何成员函数C)该类没有定义任何无参构造函数D)该类没有定义任何有参构造函数11、在下列成员函数的特点中,( D )是正确的。
A)成员函数都是可以重载的B)成员函数都是内联函数C)成员函数都可以设置默认参数D)成员函数可以是公有的,也可以是私有的12、有如下类定义:class Box{public:Box(int l,int w,int h):width(w),length(l),height(h){}private:int length,width,height;};则Box类中3个数据成员的初始化顺序为( B )A)length,height,width B)length,width,heightC)width,height,length D)width,length,height13、已知T为一个类,若有函数fun定义如下:void fun(){T t1,company[3],*p = new T;}则调用fun()后,T类的析构函数被调用了几次( D )。
构造函数和析构函数
构造函数和析构函数1、以下有关构造函数的叙述不正确的是()。
A、构造函数名必须和类名一致B、构造函数在定义对象时自动执行C、构造函数无任何函数类型D、在一个类构造函数有且仅有一个2、以下有关析构函数的叙述不正确的是()。
A、一个类只能定义一个析构函数B、析构函数和构造函数一样可以有形参C、析构函数不允许有返回值D、析构函数名前必须冠有符号“~”3、系统提供的默认拷贝构造函数中形参表和函数体分别为()。
A、形参表为空,函数体为空B、形参表为空,函数体不为空C、形参表不为空,函数体为空D、形参表不为空,函数体不为空4、设A为test类的对象且赋有初值,则语句test B=A;表示()。
A、语法错B、为对象A定义一个别名C、调用复制构造函数,将对象A复制给对象BD、仅说明B和A属于同一类5、若有如下类定义,则下列叙述正确的是()。
class Time{ int H,M,S;public:void Time(int h,int m,int s) { }; //A} //BA、A行有错误B、B行有错误C、A和B行都有错误D、A和B行都没有错误6、若有如下类定义,则下列叙述正确的是()。
class S{ int x;public:S ( ) {x=0;}S (int a) {x=++a;}void show( ) {cout<<”x=”<<x<<=""> };int main(){ S s1=100;s1.show();return 0;}B、100C、101D、07、若有如下类定义,x的值是()。
class S{ int x;S (int a=0) {x=++a;}~S ( ) { };};int main( ){ S a (10);return 0;}A、0B、10D、有语法错,得不到值8、假定AB为一个类,则执行“AB a(4),b[3],*p[2];”语句时,自动调用该类构造函数的次数为()。
作业━━第 5 章(2)━━构造函数和析构函数
构造函数和析构函数【学习要点】1.掌握构造函数的概念、定义和使用方法。
2.掌握析构函数的概念、定义和使用方法。
3.掌握拷贝构造函数的概念、定义和使用方法。
4.掌握构造函数和析构函数的调用顺序。
5.掌握包含成员对象的类的构造函数的定义方法。
6.掌握this指针的概念和应用。
7.掌握对象的生存期和作用域。
-------------------------------------------------------------------------------------------------------------------------------------------------【例题分析】1.拷贝构造函数的形参是______。
A.本类对象B.无形参C.本类对象的引用D.本类对象的各成员数据【答案】C【解析】拷贝构造函数的形参是本类对象的引用。
2.关于析构函数,下面描述中不正确的是______。
A.析构函数有且仅有一个B.析构函数无任何函数类型C.析构函数没有形参D.析构函数的作用是在对象被撤消时收回先前分配的内存空间【答案】D【解析】析构函数是在对象被撤消前执行,但析构函数本身并不收回先前分配的内存空间。
3.下面程序的运行结果是______。
#include <iostream.h>class Point{public:Point ( int a, int b ){ x=a ; y=b ; cout << "Constructor Called." << endl ; }Point ( const Point &p ) ;~Point( ){ cout << "Destructor Called.\n" ; }int xcord( ) { return x ; }int ycord( ) { return y ; }private:int x , y ;};Point :: Point ( const Point &p ){x=p.x ; y=p.y ; cout << "Copy_initialization Constructor Called.\n" ; }Point move ( Point q ){cout << "ok\n" ;int a , b ; a=q.xcord()+10 ; b=q.ycord()+20 ;Point p ( a , b ) ; return p ; }void main( ){Point m( 15 , 40 ) , p( 0 , 0 ) ;Point n( m ) ;p = move( n ) ;cout << "p=" << p.xcord() << "," << p.ycord() << endl ;}【答案】第 1 行输出:Constructor Called.第2 行输出:Constructor Called.第3 行输出:Copy_initialization Constructor Called.第4 行输出:Copy_initialization Constructor Called.第5 行输出:ok第6 行输出:Constructor Called.第7 行输出:Copy_initialization Constructor Called.第8 行输出:Destructor Called.第9 行输出:Destructor Called.第10 行输出:Destructor Called.第11 行输出:p=25 , 60第12 行输出:Destructor Called.第13 行输出:Destructor Called.第14 行输出:Destructor Called.【解析】①带参构造函数共执行三次,分别初始化主函数中的对象m, p 和函数move()中的对象p。
国家二级C++机试(类和对象)模拟试卷12
国家二级C++机试(类和对象)模拟试卷12(总分:54.00,做题时间:90分钟)一、选择题(总题数:27,分数:54.00)1.有如下类声明: class Foo{ int bar; };则Foo类的成员bar是( )。
(分数:2.00)A.公有数据成员B.公有成员函数C.私有数据成员√D.私有成员函数解析:解析:此题考查的是类的定义。
在定义类的成员变量时,如果没有使用关键字;所有成员默认定义为private私有权限。
2.有如下类定义: class Foo { public: Foo(int v):value(v){} //① -Foo(){} //② private:F00(){} //③ int value=0;//④ };其中存在语法错误的行是( )。
(分数:2.00)A.①B.②C.③D.④√解析:解析:此题考查的是类的定义。
C++语言规定,在类体内不允许对所定义的数据成员进行初始化。
3.有如下类定义:class Test { public:Test(){a=0;c=0;} ∥① int f(int a) bonst{th is->a=a;} //② static int g (){return a;} //③ void h(int b){Test::b=b;};//④ private: int a; static int b: const int c; }; int Test::b=0;在标注号码的行中,能被正确编译的是( )。
(分数:2.00)A.①B.②C.③D.④√解析:解析:此题考查的是类的定义。
一个类的长数据成员的初始化只能在成员初始化列表中进行,故选项A错误;常成员函数不能更新对象的数据成员,故选项B错误;静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员,故选项C错误。
4.有如下类声明:class SAMPLE { int n;public:SAMPLE(int i=0):n(i){} void setValue(int n0);};下列关于getValue成员函数的实现中,正确的是( )。
C++一-三章测验题
C++第一到三章测验一、选择题 (每题3分共30分)1.下面关于类概念的描述中,( )是错误的。
A)类是抽象数据类型的实现 B)类是具有共同行为的若干对象的统一描述体C)类是创建对象的样板 D)类就是C语言中的结构体类型2.面向对象程序设计思想的主要特征中不包括 ( ) 。
A)封装性 B)多态性 C)继承性 D)功能分解,逐步求精3.在C++中,函数原型不能标识 ( ) 。
A)函数的返回类型 B)函数参数的个数 C)函数参数类型 D)函数的功能4.有关析构函数的说法不正确的是( )。
A) 析构函数有且仅有一个B) 析构函数和构造函数一样可以有形参C) 析构函数的功能是用来释放一个对象D) 析构函数无任何函数类型5.关于new运算符的下列描述中,( )是错误的。
A) 它可以用来动态创建对象和对象数组B) 使用它创建对象或对象数组,可以使用运算符DELETE删除C) 使用它创建对象时要调用构造函数D) 使用它调用对象数组时不许指定初始值6.下列关于C++类的描述中错误的是 ( ) 。
A)类与类之间可以通过一些手段进行通信和联络B)类用于描述事物的属性和对事物的操作C)类与类之间必须是平等的关系,D)类与类之间可以通过封装而具有明确的独立性7.在C++语言中,数据封装要解决的问题是( )。
A) 数据的规范化 B)便于数据转换C)避免数据丢失 D)防止不同模块之间数据的非法访问8.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )。
A)公有类型 B)私有类型 C)保护类型 D)友元类型9.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是( )。
A)友元函数 B)虚函数 C)构造函数 D) 析构函数10.类的析构函数的作用是( )。
A)一般成员函数的初始化 B)类的初始化C)对象的初始化 D)删除类创建的对象二、填空题(每空3分,共15分)1. 在C++语言的面向对象设计框架中,( )是程序的基本组成单元。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类和对象、构造函数和析构函数单元测验(满分80分)学号:姓名:成绩:一、选择题(每小题1分,共10分)1.下列叙述中,不正确的是:A.一个类可以不定义构造函数B.一个类可以不定义析构函数C.类的析构函数可以重载D.类的构造函数可以重载2.执行以下程序后,输出结果依次是:class test{ int x;public:test(int a ){x=a;cout<<x<<”构造函数”;}~test(){cout<<x<<”析构函数”;}};void main(){ test x(1);x=5;}A.1 构造函数 1 构造函数 5 析构函数 5析构函数B.1 构造函数 5 构造函数 5析构函数 5析构函数C.1 构造函数 5 析构函数 5 构造函数 5析构函数D.1 构造函数 1 析构函数 5 构造函数 5析构函数3.关于构造函数,以下正确的说法是A.定义类的成员时,必须定义构造函数,因为创建对象时,系统必定要调用构造函数 B.构造函数没有返回值,因为系统隐含指定它的返回值类型为voidC.无参构造函数和参数为缺省值的构造函数符合重载规则,因此这个类中可以含有这两种构造函数D.对象一经说明,首先调用构造函数,如果类中没有定义构造函数,系统会自动产生一个不做任何操作的缺省构造函数4.关于析构函数,以下说法正确的是()A.析构函数与构造函数的唯一区别是函数名前加波浪线~,因此,析构函数也可以重载B.当对象调用了构造函数之后,立即调用析构函数C.定义类时可以不说明析构函数,此时系统会自动产生一个缺省的析构函数D.类中定义了构造函数,就必须定义析构函数,否则程序不完整,系统无法撤消对象5.对于一个C++的类()A.只能有一个构造函数和一个析构函数B.可有一个构造函数和多个析构函数C.可有多个构造函数和一个析构函数D.可有多个构造函数和多个析构函数6.下列关于对象的描述不正确的是( )。
A.对象只能描述有形的东西B.对象具有属性和服务两个主要因素C.现实世界中的一切事物都可以看作对象,但只有在具体的系统中加以论述才有实际的意义D.对象的属性是对象的静态特征,服务是动态特征,并且对象的属性只能由本对象的服务来操作7.关于类的继承不正确的是( )。
A.引入类的继承目的就是为了代码重用,提高编程效率B.子女有父母的特征是类的继承C.子继父产业是类的继承D.子类可以全部继承父类的属性和服务,也可部分继承父类的属性和服务8.构造函数的功能是()。
A.为类名分配存储空间B.为类的实例分配存储空间C.建立对象并初始化数据成员D.建立对象并初始化成员函数9.在下列函数中,()不能重载。
A.成员函数B.非成员函数C.析构函数D.构造函数10. 类中定义的各个成员需要设置被访问的权限,以下给出的关键字中,( )不能用于限定成员的访问权限。
A.extern B.private C.protected D.public二、填空题(每空1分,共16分)1.构成对象的两个主要因素是(1)和(2) ,其中(3)属于动态属性, 属于静态属性, (4)只能由(5)来操作。
2.类是(6)的集合,分类的依据是(7)。
3.程序的三种基本的控制结构是; (8)、(9)、 (10) 。
4.算法具有 (11) 、 (12) 、 (13) 、 (14) 的性质,所以在编程时要保证这些性质的实现。
5.这是一个从键盘输入三个数,找出最大数的程序。
请在空白处填写所缺内容。
void main(){ int a,b,c,x;cin>>a;cout<<”a=”<<a<<endl;cin>>b;cout<<”b=”<<b<<endl;cin>>c;cout<<”c=”<<c<<endl;if (15)cout<<”the three numbers are equal,they are;<<a<<endl”;else{ if(a>b)x=a;elseif (16)x=b;elsecout<<”me greatest number is;”<<x;})三、阅读程序题(每空2分,共30分)1、根据程序回答问题:#include<iostream.h>class A{ int x,y;public:A(int a,int b){x=a;y=b;cout<<”ABC”<<’\t’;}A(){x=3;y=4;cout<<”CBA”<<’\n’;}void Show(){ cout<<”x=”<<x<<’\t’<<”y=”<<y<<’\t’;}~A(){ cout<<”XYZ”<<’\n’;}};void main(void){A *s1=new A(1,2),*s2=new A;s2->Show();delete s1;delete s2;}问题一:本程序的执行后输出结果是: (1)问题二:如果将语句s2->Show()改为s1->Show(),执行结果是: (2)2、根据程序回答问题:#include<iostream.h>class A{public:A(int a) {x=a;cout<<”x=”<<x<<’\t’<<”class_A”<<’\n’;} ~A(){cout<<”class_~A”<<’\n’;}private:int x;};class B{ A y,z; int s;public:B(int a,int b,int c);y(a+b+c),z(3-a){ s=c-b;cout<<”s=”<<s<<’\t’<<”class_B”<<’\n’;}~B(){cout<<”class_~B”<<’\n’;}};void main(void){ B s(1,2,3);}问题一:本程序共输出 (3) 行,其中第三、第四行分别是 (4)问题二:本程序中,y,z是 (5) 的对象成员,它们是 (6) 的对象,它们的访问权属于 (7)3、阅读程序,回答问题#include<iostream.h>class node{int x,y;public:node(int a,int b){ x=a;y=b;cout<<”node_1”<<’\n’;}node(){ x=a.x;y=a.y;cout<<”node_2”<<’\n’;}void Show(){ cout<<”x=”<<x<<’\t’<<”y=”<<y<<’\n’;}};void main(void){node f1(5,6);node f2(f1);f2.Show();}问题一:构造函数node()的参数表中缺少一个形参,这个形参的正确定义是: (8) 问题二:node()中的形参被正确定义后,执行结果依次是: (9)4、阅读程序回答问题:#include<iostream.h>class A{int x;public:void Show(){ cout<<”x=”<<x<<’\t’’}A(int a=10){ x=a;cout<<”A”<<’\n’;}~A(){ cout<<”~A”<<’\n’;}};void main(void){A f; f.Show();f=20;f.Show();}问题一:本程序共输出 (10) 行,依次是: (11)问题二:与语句f=20等价的语句是 (12)问题三:语句f=20是系统采用了 (13) 的类型转换问题四:语句f=20的作用是 (14)A.将常数20赋给对象f,然后调用构造函数B.先用对象f调用构造函数,然后将20赋给fC.f自动产生一个临时对象,再调用构造函数,将20初始化构造函数D.=左边调用构造函数,并将20转换为临时对象,完成初始化后将临时对象赋给f问题五:程序执行结果是: (15)四、完善程序(每空2分,共24分)1.Rect是一个矩形类,main()函数中定义了3个对象,分别用到了两个构造函数,其中的缺省构造函数将数据成员全部初始化为0。
main()中又执行了两矩形相加操作和输出操作。
请完善程序。
class Rect{private:float x://左下角X坐标float y;//左下角Y坐标float w://宽float h://高public:Rect(){ (1) }Rect( (2) ){x=a;y:=b;w=c;h=d;};Rect operator+(Rect b);void Display();};Rect (3) (Rect b){Rect s;s.x=x+b.x;s.y=y+b.y;s.w=w+b.w;s.h=h+b.h;return (4) ;}void Rect::Display(){cout<<”x=”<<x<<'\t’<<”y=”<<y<<'\t';cout<<”w=”<<w<<'\t'<<”h=”<<h<<endl:}void main(){Rect A,B(1.4,2,3,20),c(2.5,5,3,4.8);A=B+C:A.Display();}2.以下程序中定义了一个电话簿类TeleBook,数据成员tbook用于存储一个链表结构的电话簿,结构item定义了链表中的一个数据项。
数据成员number表示电话簿中已存入的数据元素个数。
程序运行时用户可以通过菜单选择成员函数提供的插入新号码、查找、打印清单和删除一个号码等操作。
选择输入时,要求输入姓名和对应的电话号码,新结点插在链首。
选择删除时,输入一个姓名,先在表中查找该项,若找到则进行删除操作,否则给出提示信息。