106、请说出调用拷贝构造函数的三种情况。
- 初始化新对象时,如使用替代语法
bag y = x;或bag y(x);; - 函数返回值为对象时,将局部变量的值复制到返回位置;
- 当值参数为对象时,将实际参数复制到形式参数。
107、编写一段 C++ 代码,声明一个常规的 C++ 以空字符结尾的字符串,该字符串最多可容纳 20 个字符,将用户输入读取到该字符串中,在字符串末尾追加一个感叹号,并打印结果。
#include <iostream>
int main() {
char str[20];
std::cin >> str;
int i = 0;
while (str[i] != '\0') {
i++;
}
if (i < 19) {
str[i] = '!';
str[i + 1] = '\0';
}
std::cout << str << std::endl;
return 0;
}
108、为什么字符串类需要析构函数?
因为字符串类使用了动态内存,析构函数的主要目的是在对象不再使用时将对象的动态内存返回给堆。
109、编写一个支票簿对账程序。该程序将读取自上次核对支票簿以来所有未兑现支票的以下信息:每张支票的编号、支票金额。程序还需读取所有存款、旧账户余额和新账户余额。实现程序,使其完成对支票簿的对账功能。
程序需使用动态数组存储“支票”,每个支票是自定义的数据类型对象。可用第二个动态数组存储存款列表。新账户余额应等于旧余额加上所有存款,减去所有已兑现的支票。
程序要打印以下信息:
- 已兑现支票总额
- 存款总额
- 新余额应有的数值
- 该数值与银行所说的新账户余额的差值
此外,还需打印两份支票列表:
- 自上次核对支票簿以来已兑现的支票
- 仍未兑现的支票
110、编写链表中节点所需的类定义,使用名称 value_type 表示数据类型。
class node {
public:
typedef double value_type;
value_type data_field;
node *link_field;
};
111、C++常量NULL的含义是什么?在程序中使用NULL需要添加什么额外代码?
`NULL` 表示空指针,是一个特殊的 C++ 常量,可用于任何没有指向位置的指针值。要在程序中使用 `NULL`,需要包含标准库工具 `<cstdlib>`,且 `NULL` 不属于 `std` 命名空间,可直接写 `NULL`。
112、描述空指针的两种常见用途。
- 用于链表最后一个节点的链接字段;
- 当链表还没有任何节点时,用于头指针和尾指针的值,表示空链表。
113、如果value_type是内置数字或布尔类型之一,其默认构造函数会给出什么值?
对于数字类型返回零,对于布尔类型返回false。
114、假设 head_ptr 指向一个非空链表的第一个节点。编写代码,若第一个节点中的数据为 0,则打印单词 “zero”。
可使用如下代码:
if (head_ptr->data() == 0) {
cout << "zero";
}
115、考虑语句:cout << (*head_ptr).data( );。如果省略head_ptr周围的括号会发生什么?请写出调用data( )类成员的替代语法。
如果省略括号,表达式 *head_ptr.data() 会导致语法错误,因为访问成员(如 data 成员函数)的操作比解引用星号的优先级高,会尝试在解引用之前调用 head_ptr.data() 。替代语法是使用成员选择运算符 -> ,即 head_ptr->data() 。
116、假设b_ptr是一个指向对象的指针,该对象有一个成员函数size,它返回对象中元素的数量。请使用成员选择运算符编写一条语句,用于打印b_ptr所指向的对象中元素的数量。
std::cout << b_ptr->size() << std::endl;
117、描述如果对空指针进行解引用可能会出现的问题。
对空指针进行解引用不会导致语法错误,但在程序运行时,会尝试将空指针解释为有效地址。
有时会立即引发运行时错误,显示如以下消息:
- “地址保护违规”
- “总线错误,核心转储”
在其他机器上,空地址可能被视为有效地址,导致程序读写意外的内存位置:
- 该位置可能是操作系统的一部分
- 从而损坏操作系统
- 在程序完成后的某个时刻可能引发错误
118、为什么这个 link 实现是错误的?node* link( ) const { return link_field; }
该实现将 link 定义为常量成员函数,但返回了一个非常量的 node* 指针。常量成员函数应保证不修改对象状态,而返回非常量指针可能被用于修改链表,违背了常量成员函数的初衷。此外,当通过常量对象调用此函数时,会得到一个可修改链表的指针,这不符合常量对象不能被修改的规则。
119、假设你想使用一个链表,其中的元素是标准库字符串类中的字符串。你需要如何修改 node1.h 头文件?
必须在工具包头文件的其他包含指令中添加 #include <string> 指令。然后将 typedef 语句修改为:

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



