面向对象程序设计是现代软件开发中的核心概念,主要涉及类、对象、封装、继承、多态等关键知识点。在这个20春川大《面向对象程序设计2261》在线作业中,我们看到了多个关于C++编程的问题,这些问题涵盖了C++的基础语法、类与对象的操作、输入输出、容器、文件操作以及算法等多个方面。
1. 字符串赋值:在C++中,字符串可以通过不同的方式赋值。选项A和B是错误的,因为它们尝试为固定大小的字符数组赋值超过其容量的字符串。选项C是正确的,因为它使用了字符指针来存储字符串。选项D是正确的,因为它使用初始化列表来逐个赋值字符。
2. 重载运算符:在C++中,成员函数形式重载运算符通常需要返回一个对象的引用,以便支持连续操作,如`a++`。因此,正确答案是B:`myclass& operator++()`。
3. 输入输出语句:C++的`std::cout`用于输出,`left`设置对齐方式。选项A和B中的`left`影响输出的对齐,选项C和D则不会因为去除“left”而改变输出效果。
4. 主函数:每个C++程序必须包含`main`函数,这是程序的入口点。
5. 抽象类与纯虚函数:抽象类至少包含一个纯虚函数,不能实例化。选项C错误,纯虚函数的声明以";"结束,但可以有函数体,只是在抽象类中不能被实现。
6. 容器:C++标准库中的`map`容器不支持下标操作,而是通过键值对访问。
7. 文件操作:要读取文件数据,应使用`ifstream`类的对象。
8. 二叉查找树:中序遍历二叉查找树会得到有序序列。
9. 构造函数:类如果没有定义构造函数,编译器会自动生成默认的无参构造函数。
10. 输入分隔符:在C++中,从键盘输入多数据时,可以使用空格或回车作为分隔符。
11. 多态性:通过虚函数实现,使得子类对象能够通过基类指针调用相应的函数。
12. 指针操作:指针变量可以比较和指向同一地址,但不能相加,也不直接支持相减(除非是相同类型的指针)。
13. 数组索引:数组的索引从0开始,所以`a[8]`实际上是指向第9个元素的地址,对于二维数组,`a[2][0][1]`是第10个元素。
14. 非成员函数重载运算符:正确的原型应该是`Value operator+(Value v, int i=0)`,允许传入一个默认值为0的整数。
15. 链表:链表的基本单元是节点,包含数据域和指向下一个节点的指针。
16. 排序算法:冒泡排序法在最坏的情况下效率最低,时间复杂度为O(n^2)。
17. C++源文件扩展名:通常是`.cpp`。
18. 静态成员初始化:静态成员需要在类外初始化,格式为`static 数据类型 类名::静态成员名 = 值`,所以答案是`static int Point::how_many = 0;`。
19. `cout`输出:四个语句中,只有①和②能正确显示`A******B`,因为`left`和`setw(7)`控制了输出的对齐和宽度。
这些问题是C++编程学习中的常见问题,涵盖了基础语法和高级特性,对于理解和掌握面向对象编程至关重要。