这篇文档是关于面向对象技术与C++的一次考试的A卷答案解析,主要涵盖了C++中的类、继承、成员函数、指针、友元函数以及动态内存管理等多个知识点。
1. 在第一题中,题目考察了类的访问控制和继承。类`A`定义了一个公共成员函数`f`和一个私有成员函数`g`。类`B`私有继承自`A`,并提供了公共成员函数`h`。为了在`B`类的对象`d`上调用`A`类的`f`函数,需要在`B`类中重定义`f`,通过`A::f(i)`调用基类的`f`函数。因此,(1)处填写`public:`,(2)处填写`void f(int i) {A::f(i);}`。
2. 第二题涉及类对象的初始化、指针操作以及数组。`p_class`类有一个私有成员变量`num`和两个公共成员函数`set_num`和`show_num`。在`main`函数中,创建了`p_class`类型的数组`ob`和指针`p`,并分别通过指针`p`访问数组中的元素调用`show_num`函数。(3)、(4)、(5)处分别设置`p`指向数组的不同元素,以显示不同数值。正确答案是`(3)p=&ob[1]`,`(4) p=&ob[2]`,`(5)p=&ob[0]`。
3. 第三题涉及类的成员函数和友元函数。类`Tdate`包含成员变量`month`、`day`和`year`,以及判断闰年的`IsLeapYear`函数。为了输出日期,需要定义一个`Print`函数,但题目中要求`Print`函数在类外定义,因此(6)处填写`public:`,(7)处填写`void Print()`,并在类外定义`void Tdate::Print()`。同时,为了使`Print`函数可以访问`Tdate`的私有成员,需要声明`Print`为`Tdate`的友元,所以在类定义结束前添加(8)处的`void Tdate::Print()`。
4. 第四题涉及到友元函数和类的成员函数。类`Time`包含`hours`和`minutes`两个成员变量,并提供构造函数`Time(int h, int m)`。类`Time`有两个成员函数,一个是`Time12`用于将24小时制转换为12小时制,另一个是`Time24`,接受一个`Time`对象作为参数,将24小时制的时间输出。(9)处定义`Time12`为友元函数,(10)处定义`Time::Time12()`,(11)处是`Time24`函数的实现,输出传入的`Time`对象的`hours`和`minutes`。
5. 最后一题涉及类的定义和构造函数。类`ARRAY`包含一个整型指针`v`和一个整型变量`s`,表示数组的大小。构造函数接收一个整型数组`a`,用于初始化`v`所指向的数组。这个类重载了方括号运算符`[]`,用于检查下标是否越界。构造函数的实现可能包括动态分配内存并复制数组元素到`v`。
通过这些题目,我们可以看到C++中面向对象编程的一些核心概念,如类的定义、成员函数、继承、访问控制、友元、构造函数、动态内存管理等。这些知识点是C++学习的基础,也是进一步深入研究C++模板、异常处理、STL等高级特性的前提。