【问题分析】
本题主要考查引用的含义。 【结果分析】
程序首先定义一个int类型的对象num,并给它赋初始值50。然后又定义了一个int类型的引用ref,并将它和num相联系。这样,无论是对num还是对ref进行操作,实际上都是对那个一开始放着50的物理单元的内容进行操作。 七、 程序设计题
写出一个完整的C++程序,使用系统函数pow(x,y)计算xy的值,注意包含头文件cmath。 【问题分析】
本题主要考查简单的输入输出和标准库函数的调用方法。 【解题思路】
① 由于要用到系统函数pow(x,y),所以要包含头文件cmath。
② 要计算xy的值,首先必须知道x和y的值。为了程序的通用性,最好通过交互的方式输入x和y的值。 【参考程序】
// xt2_1.cpp
#include
#include
using namespace std;
int main() {
float x,y;
cout<<\,y:\
cin>>x>>y;
float z=pow(x,y);
cout<<\(\,\)=\
return 0; }
【输出结果】
please input 2 floats to x,y:3.1 2
pow(3.1,2)=9.61 第 3 章
类与对象
面向对象程序设计教程(C++语言描述)题解与课程设计指导
第3章
类 与 对 象
一、 填空题 (1) 类定义中关键字private、public和protected以后的成员的访问权限分别是私有、公有和保护。如果没有使用关键字,则所有成员默认定义为private权限。具有public访问权限的数据成员才能被不属于该类的函数所直接访问。 (2) 定义成员函数时,运算符“∷”是作用域运算符,“MyClass∷”用于表明其后的成员函数是在“MyClass类”中说明的。
(3) 在程序运行时,通过为对象分配内存来创建对象。在创建对象时,使用类作为样板,故称对象为类的实例。
(4) 假定Dc是一个类,则执行“Dc a[10],b(2)”语句时,系统自动调用该类构造函数的次数为11。 【结果分析】
创建10个数组元素需调用构造函数10次,创建对象b需调用构造函数1次,所以系统自动调用该类构造函数的总次数为11。
(5) 对于任意一个类,析构函数的个数最多为1个。
(6) delete运算符通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。
(7) C++程序的内存格局通常分为4个区: 数据区、代码区、栈区和堆区。 (8) 数据定义为全局变量,破坏了数据的 封装性; 较好的解决办法是将所要共享的数据定义为类的 静态成员。
(9) 静态数据成员和静态成员函数可由 任意访问权限许可的函数访问。 (10) 友元函数和 友元类统称为友元。 (11) 友元的正确使用能提高程序的效率,但破坏了类的封装性和数据的隐蔽性。 (12) 若需要把一个类A定义为一个类B的友元类,则应在类B的定义中加入一条语句: friend class A;。
二、 选择题(至少选一个,可以多选) (1) 以下不属于类访问权限的是( B )。 A. public B. staticC. protectedD. private 【结果分析】
类的访问权限有public、protected 和private。 (2) 有关类的说法不正确的是( BC )。 A. 类是一种用户自定义的数据类型
B. 只有类的成员函数才能访问类的私有数据成员
C. 在类中,如不做权限说明,所有的数据成员都是公有的 D. 在类中,如不做权限说明,所有的数据成员都是私有的 【结果分析】
类是一种用户自定义的数据类型,类中成员均具有一种访问权限。关键字
public、protected 和private以后的成员的访问权限分别是公有、保护和私有的,所有成员默认定义为private的。
私有成员是被隐藏的数据,只有该类的成员函数或友元函数才可以访问它。 (3) 在类定义的外部,可以被任意函数访问的成员有( C )。 A. 所有类成员 B. private或protected的类成员 C. public的类成员 D. public或private的类成员 【结果分析】
类是一种用户自定义的数据类型,类中成员均具有一种访问权限。公有成员定义了类的外部接口。私有成员是被隐藏的数据,只有该类的成员函数或友元函数才可以引用它。保护成员具有公有成员和私有成员的双重性质,可以被该类或派生类的成员函数或友元函数引用。可见在类定义的外部,可以被任意函数访问的成员是public的类成员。
(4) 关于类和对象的说法( C )是错误的。 A. 对象是类的一个实例
B. 任何一个对象只能属于一个具体的类 C. 一个类只能有一个对象
D. 类与对象的关系和数据类型与变量的关系相似 【结果分析】
C++语言的类就是一种用户自己定义的数据类型,类和对象的关系就相当于基本数据类型与它的变量的关系,所以任何一个对象只能属于一个具体的类,但一个类可以有多个对象。
(5) 设MClass是一个类,dd是它的一个对象,pp是指向dd的指针,cc是dd的引用,则对成员的访问,对象dd可以通过( B )进行,指针pp可以通过( D )进行,引用cc可以通过( B )进行。
A. ∷ B. . C. & D. -> (6) 关于成员函数的说法中不正确的是( C )。 A. 成员函数可以无返回值 B. 成员函数可以重载 C. 成员函数一定是内联函数
D. 成员函数可以设定参数的默认值 【结果分析】
与普通函数不同的是,成员函数是属于某个类的。成员函数的实现,可以放在类体内,也可以放在类体外。在类体外实现的成员函数不再是内联函数。 (7) 下面对构造函数的不正确描述是( B )。 A. 系统可以提供默认的构造函数
B. 构造函数可以有参数,所以也可以有返回值 C. 构造函数可以重载
D. 构造函数可以设置默认参数 【结果分析】
构造函数不能指定返回类型,即使是void类型也不可以,当然不可能有返回值。 (8) 假定A是一个类,那么执行语句“A a,b(3),*p; ”调用了( B ) 次构造函数。
A. 1 B. 2 C. 3 D. 4 【结果分析】
声明指针是不会调用构造函数的。
(9) 下面对析构函数的正确描述是( AC )。 A. 系统可以提供默认的析构函数 B. 析构函数必须由用户定义 C. 析构函数没有参数
D. 析构函数可以设置默认参数 【结果分析】
析构函数的作用是在对象消失时执行一项清理任务。如果一个类中没有定义析构函数,系统将自动生成一个默认析构函数。析构函数没有参数,当然不可能设置默认参数。
(10) 类的析构函数是( D )时被调用的。
A. 类创建 B. 创建对象 C. 引用对象 D. 释放对象
(11) 创建一个类的对象时,系统自动调用( B ); 撤销对象时,系统自动调用( C )。
A. 成员函数 B. 构造函数 C. 析构函数 D. 复制构造函数 (12) 通常拷贝构造函数的参数是( C )。
A. 某个对象名 B. 某个对象的成员名 C. 某个对象的引用名 D. 某个对象的指针名 (13) 关于this指针的说法正确的是( B )。
A. this指针必须显式说明B. 当创建一个对象后,this指针就指向该对象 C. 成员函数拥有this指针D. 静态成员函数拥有this指针。