HZAU-专业C++作业11-12
判断题
1. 友元关系是单向的,不可交换的。 (2分)
2. 只有成员函数才能传递this指针,而友元函数不能传递this指针 (2分)
3. 友元函数是成员函数,它可以访问类中私有成员。 (2分)
4. 在成员函数中访问对象的数据成员时,可以直接用数据成员名,而在友员函数中访问对象的数据成员时,必须指明是哪个对象的数据成员。 (2分)
5. 友元是可以继承的。 (2分)
6. 常成员函数只能用来引用数据成员的值,而不允许改变数据成员的值。 (2分)
7. C++语言允许使用友元,但是友元会破环封装性。 (2分)
8. 必须在类定义体外对静态数据成员进行初始化。 (2分)
9. 能访问一个类CMyClass中的private成员的可以是类CMyClass的成员函数,友元函数和友元类中的函数。 (2分)
10. 类的友元函数是指可以访问本类私有成员的其他类的成员函数。 (2分)
11. 类中的静态成员数据为该类的所有对象所共享,并且,在该类对象被撤销时,静态成员并没有撤销。 (2分)
12. 如果在一个类的对象之间要进行数据交换,可以使用该类的静态数据成员来完成。 (2分)
13. 如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。 (2分)
1.
如果类A被说明成类B的友元,则()。
(2分)
A. 类A的成员即类B的成员 B. 类B的成员即类A的成员 C. 类A的成员函数不得访问类B的成员 D. 类B不一定是类A的友元
2.
友元的作用()。
(2分)
A. 提高程序的运用效率 B. 加强类的封装性 C. 实现数据的隐藏性 D. 增加成员函数的种类
3.
下述静态数据成员的特征中,( )是错误的。
(2分)
A. 静态数据成员要在类体外进行初始化
B. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
C. 静态数据成员不是所有对象所共用的
D. 说明静态数据成员时前边要加修饰符static
4.
已知类A是类B的友元,类B是类C的友元,则( )。
(2分)
A. 类A一定是类C的友元
B. 类C一定是类A的友元
C. 类C定的成员函数可以访问类B的对象的任何成员
D. 类A定的成员函数可以访问类B的对象的任何成员
5.
下面对于友元函数描述正确的是( )。
(2分)
A. 实现必须在类的内部定义 B. 是类的成员函数 C. 破坏了类的封装性和隐藏性 D. 不能访问类的私有成员
6.
下列运算符不能重载为友元函数的是( )。
(2分)
A. = () [] -> B. + - ++ -- C. > < >= <= D. += -= *= /=
7.
下面对静态数据成员的描述中,正确的是( )。
(2分)
A. 可以在类体内进行初始化 B. 不可以被类的对象调用 C. 不能受private控制符的作用 D. 可以直接用类名调用
8.
说明静态成员函数的关键字为( )。
(2分)
A. virtual B. static C. enum D. inline
9.
关于友元的描述中()是错误的。
(2分)
A. 友元函数是成员函数,它被说明在类体内(可在类体的任何地方)
B. 友元函数可直接访问类中的私有成员
C. 友元函数破坏封装性,使用时尽量少用
D. 友元类中的所有成员函数都是友元函数
10.
在下列各类函数中,不属于类的成员函数的是()。
(2分)
A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数
11.
下列说明const char *p;其中p应该是()。
(2分)
A. 指向字符常量的指针 B. 指向字符的常量指针 C. 指向字符串常量的指针 D. 指向字符串的常量指针
12.
已知:print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是()。
(2分)
A. void print() const; B. const void print(); C. void const print(); D. void print(const);
13.
模板对类型的参数化提供了很好的支持,因此( )。
(2分)
A. 类模板的主要作用是生成抽象类
B. 类模板实例化时,编译器将根据给出的模板实参生成一个类
enum函数C. 在类模板中的数据成员都具有同样类型
D. 类模板中的成员函数都没有返回值
14.
模板定义中的类型参数可以用作( )。
(2分)
A. 局部变量类型 B. 函数参数类型 C. 函数返回值类型 D. 以上的都可以
15.
类模板的使用实际上是将类模板实例化成一个具体的( )。
(2分)
A. 类 B. 对象 C. 函数 D. 模板类
16.
一个( )允许为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。
(2分)
A. 函数模板 B. 模板函数 C. 类模板 D. 模板类
程序设计题
1. (5分)
函数模板
题目描述
下面程序定义一个函数模板,返回两个值中的最大值,请将以下程序的空补充完整后提交。
#include<iostream>
using namespace std;
(1) <class T>
inline T (2) Max(T const& a, T const& b)
{
return (3) ;
}
int main()
{
cout<<Max(5,10)<<endl;
cout<<Max(7.8,5.6)<<endl;
return 0;
}
输入描述
无
输出描述
略
输入样例
无
输出样例
10
7.8
2. (10分)
类模板
题目描述
程序功能是计算不同类型的数据之和。请补充完整程序,并提交。
#include<iostream>
using namespace std;
(1)<class T>
class TAdd
{
private:
T x,y;
public:
TAdd(T a,T b)
{
(2)
(3)
}
T add()
{
(4) ;
}
};
int main()
{
TAdd<int> A(5,6);
TAdd<double> B(2.4,5.8);
cout<<"s1="<<A.add()<<",";
cout<<"s2="<<B.add()<<endl;
return 0;
}
输入描述
无
输出描述
略
输入样例
无
输出样例
s1=11,s2=8.2
3. (10分)
静态数据成员
题目描述
设计一个日期(Date)类,其中有数据成员int year,month,dat;,有静态数据成员数组int days[12];,用于分别存放一年12个月的天数,初始化为{31,28,31,30,31,30,31,31,30,31,30,3
1}。在具体应用时,根据对象的成员year年是否为闰年调整2月份的天数days[1]的值。请设计一个成员函数计算对象的日期在当年是第几天。
类的成员函数可以设计如下:
Date(int Year=2000,int Month=1, int Day=1);//构造函数
void Set(int Year, int Month, int Day);
int isLeapyear();//判断是否为闰年
int Days();//计算是该年的第几天
void Show();//显示年月日
并且,在类外编写一个测试函数:
void test(int y, int m, int d)
输入描述
待测试的日期
输出描述
天数
输入样例
2012 1 1
2012 2 1
2012 3 1
2012 4 1
2012 5 1
输出样例
是2012年的第1天
是2012年的第32天
是2012年的第61天
是2012年的第92天
是2012年的第122天
4. (10分)
友元
题目描述
设计Point类描述平面直角坐标系中的点,其中有数据成员double x,y;,再设计一个该类的友元函数用于计算两个给定的Point类对象之间的距离。
如:friend double distance(const Point &p1, const Point &p2);
主函数如下:
int main()
{
Point a,b(1,2);
a.Show(); b.Show();
cout<<distance(a,b)<<endl;
return 0;
}
程序运行结果见后面的描述。
输入描述
无
输出描述
略
输入样例
无
输出样例
(0,0)
(3,4)
5
5. (7分)
类模板改错题
题目描述
请将教材P352页的练习12的第1题改正后提交。
输入描述
无
输出描述
无
输入样例
略
输出样例
略
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论