当前位置:首页 > 《C++程序设计》上机指导与补充习题
while(*t!='\\0') t++;
return(t-s); }
第3章 类和对象
一、选择题
1、有关类的说法不正确的是( )。 A 类是一种用户自定义的数据类型.
B 只有类中的成员函数才能存取类中的私有成员.
C 在类中,如果不做特别说明,所指的数据均为私有类型.
D 在类中,如果不做特别说明,所指的成员函数均为公有类型。 2、下面说法正确的是( )。
A 类定义只能说明成员函数头,不能定义函数体
B 类中的函数成员可以在类体中定义,也可以在类体之外定义 C 类的函数成员在类体之外定义时必须要与类声明在同一函数中 D 在类体之外定义的函数成员不能操作该类的私有数据成员 3、已知类X中的一个成员函数说明如下:
Void Set(x &a);
其中,X &a的含义是( )。 A 指向类X的指针为a B 将a的地址赋给变量Set
C a是类X的对象引用,用来做为Set()的形参 D 变量X是a按位相与作为函数Set()的参数 4、有关类和对象的说法不正确的是( )。 A 对象是类的一个实例 B 一个类只能有一个对象
C 任何一个对象只能属于一个具体的类
D 类与对象的关系和数据类型和变量的关系相似 5、下面对于对象概念描述中,错误的是( )。 A 对象就是C语言中的结构体变量
B 类中的函数成员可以在类体中定义,也可以在类体之外定义 C 类中的函数成员在类体之外定义时必须要与类声明在同一文件中 D 在类体之外定义的函数成员不能操作该类的私有数据成员 6、关于常数据成员的说法不正确的是( )。
A 常数据成员的定义形式与一般常量的定义形式相同,只不过常数据成员的定义必须出现在类体中.
B 常数据成员必须进行初始化,并且不能被更新
C 常数据成员通过构造函数的成员初始化列表进行初始化 D 常数据成员可以在定义时直接初始化
7、下列关于成员访问权限的描述中,不正确的是( )。
A 公有数据成员和公有成员函数都可以被类对象直接处理
B 类的私有数据成员只能被公有成员函数以及该类的任何友元类或友元函数访问
C 保护成员在派生类中可以被访问,而私有成员不可以
D 只有类或派生类的成员函数和友元类或友元函数可以访问保护成员 8、类定义的内容允许被其他对象无限制地存取是( )。 A private 部分 B protected 部分 C public 部分 D 以上都不对 9、下列不是构造函数的特征的是( )。
A 构造函数的函数名与类名相同 B 构造函数可以重载
C 构造函数可以设置默认参数 D 构造函数必须指定类型说明 10、有关析构函数的说法不正确的是( )。 A 析构函数有且仅有一个
B 析构函数和构造函数一样可以有形参 C 析构函数的功能是用来释放一个对象 D 析构函数无任何函数类型
11、下列的各类函数中,不是类的成员函数的是( )。
A 构造函数 B 析构函数 C 友元函数 D 拷贝构造函数 12、关于对象成员的构造函数的调用顺序,说法正确的是( )。 A 与它们在成员初始化列表中给出的顺序相同 B 与析构函数的调用顺序相同 C 与它们在类中说明顺序相同 D 以上说法都不对
13、下面说法中正确的是( )
A 一个类只能定义一个构造函数,但可以定义多个析构函数 B 一个类只能定义一个析构函数,但可以定义多个构造函数
C 构造函数与析构函数同名,只要名字前加了一个求反符号(~) D 构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是void类型也不可以 二、填空题
1、类的 只能被该类的成员函数或友元函数访问。
2、类的数据成员不能在定义时初始化,而应该通过 初始化。 3、类的成员的可访问性可分为三类: 、 、 。 4、类成员默认的访问方式是 。
5、类的 可以被类作用域内的任何对象访问。
6、声明完类之后,就可以使用类来定义对象了,这个过程称为 。
7、类中有两类成员,一类是 ,用来描述对象的静态属性;另一类则是 ,用来描述对象的动态行为。 8、通过指针访问公有成员是使用“ ”运算符,通过对象访问公有成员是使用“ ”运算符。
9、假定AB是一个类,则语句 是该类拷贝构造函数的原形说明。 10、析构函数在对象的 时被自动调用,全局对象和静态对象的析构函数在 调用。 三、程序分析题
1、写出程序的运行结果
#include
Class MyClass{ public:
int number; void set(int i); };
int number=3;
void MyClass::set(int i) {
number=i; }
void main() {
MyClass my1; int number=10; my1.set(5);
cout< cout< 2、分析以下程序的执行结果 #include int x; public: Sample(){}; Sample(int a){x=a;} Sample(Sample &a){x=a.x+1;} void disp(){cout<<\ }; void main() { Sample s1(2),s2(s1); s2.disp(); } 3、分析以下程序的执行结果 #include int x,y; public: Sample(){x=y=0;} Sample(int i,int j){x=i;y=j;} void copy(Sample &s); void setxy(int i,int j){x=i;y=j;} void print(){cout<<\ }; void Sample::copy(Sample &s) { x=s.x;y=s.y; } void func(Sample s1,Sample &s2) { s1.setxy(10,20); s2.setxy(30,40); } void main() { Sample p(1,2),q; q.copy(p); func(p,q); p.print(); q.print(); } 4、分析以下程序的执行结果 #include public: int x; int y; void disp() { cout<<\ } }; void main() { int Sample::*pc; Sample s; pc=&Sample::x; s.*pc=10; pc=&Sample::y; s.*pc=20; s.disp();
共分享92篇相关文档