没有合适的资源?快使用搜索试试~ 我知道了~
计算机作业6666666
需积分: 0 0 下载量 177 浏览量
2023-05-11
16:42:15
上传
评论
收藏 109KB DOCX 举报
温馨提示
试读
44页
计算机作业6666666
资源推荐
资源详情
资源评论
1. 实验一思考题
1)重载函数是通过什么来区分?
重载函数是通过函数的参数列表来区分的。在 C++ 中,可以定义多个同名的函数,只要它
们的参数列表不同,就可以被编译器视为不同的函数,称为函数的重载(Overloading)。
具体来说,函数的参数列表包括参数的类型、个数和顺序。如果两个函数的参数列表不同,
那么它们就是不同的函数,可以在同一个作用域内共存。
例如,下面的代码定义了两个名为 sum 的函数,一个接受两个整数参数,一个接受两个浮
点数参数:
int sum(int a, int b) {
return a + b;
}
float sum(float a, float b) {
return a + b;
}
这两个函数虽然同名,但是它们的参数列表不同,因此是两个不同的函数。在调用这两个函
数时,编译器会根据传递的参数类型来自动选择调用哪个函数。
注意,重载函数的返回类型不能用于区分函数,否则会导致编译错误。
2)new 和 delete 操作符与 C 语言中的 malloc()和 free()函数有何异同点?
new 和 delete 操作符是 C++ 中用于动态分配和释放内存的关键字,而 malloc() 和 free()
函数是 C 语言中用于动态分配和释放内存的函数。它们的异同点如下:
1)用法上的不同:
new 和 delete 是 C++ 中的关键字,可以直接在 C++ 程序中使用,而 malloc() 和 free()
是 C 语言中的函数,需要包含 stdlib.h 头文件才能使用。
new 操作符会同时分配内存并调用对象的构造函数,delete 操作符会同时调用对象的析构
函数并释放内存,而 malloc() 和 free() 只是分配和释放内存,不会调用对象的构造函数和
析构函数。
2)返回值类型的不同:
new 操作符返回分配的对象的类型指针,而 malloc() 函数返回 void 类型的指针,需要进
行强制类型转换才能使用。
delete 操作符没有返回值,而 free() 函数返回 void 类型的指针,可以忽略返回值。
参数的不同:
new 操作符需要指定要分配的对象的类型,并可以接受构造函数的参数列表,如:int* p =
new int(10);。
delete 操作符需要指定要释放的对象的指针,如:delete p;。
malloc() 函数需要指定要分配的内存块的大小,并返回分配的内存块的指针,如:int* p =
(int*)malloc(sizeof(int));。
free() 函数需要指定要释放的内存块的指针,如:free(p);。
内存管理的不同:
new 和 delete 操作符通过重载可以实现自定义的内存管理方式,而 malloc() 和 free() 函
数不能自定义内存管理方式。
new 和 delete 操作符会在内存不足时抛出 std::bad_alloc 异常,而 malloc() 函数会返回
NULL 指针表示分配失败。
new 和 delete 操作符相比 malloc() 和 free() 函数更加方便和安全,而且可以与 C++ 中
的对象模型完美结合。但是,在 C++ 中也可以使用 malloc() 和 free() 函数,只是需要进
行类型转换和手动调用构造函数和析构函数,比较繁琐。
3)C++ 提供的输入输出操作与 C 语言的输入输出操作的异同点?
1.标准库的不同:
C++ 中的输入输出操作是通过标准库 iostream 实现的,包含在头文件 <iostream> 中。
而 C 语言中的输入输出操作是通过标准库 stdio 实现的,包含在头文件 <stdio.h> 中。
2.输入输出流的概念:
C++ 中的输入输出操作是基于流(stream)的概念,即数据是通过流进行传输的。流可以
是从键盘、文件或其他设备中读取数据,也可以将数据写入到屏幕、文件或其他设备中。C++
中提供了两种基本的流类型:输入流(istream)和输出流(ostream)。
C 语言中的输入输出操作是基于文件的概念,即数据是通过文件进行读写的。C 语言中使
用 FILE 类型表示文件,使用 fopen() 函数打开文件,使用 fprintf() 函数和 fscanf() 函数进
行格式化的输入输出操作,使用 fread() 函数和 fwrite() 函数进行二进制的输入输出操作。
3.输入输出操作符的不同:
C++ 中使用流插入运算符(<<)和流提取运算符(>>) 进行输入输出操作。流插入运算符
用于将数据写入输出流中,流提取运算符用于从输入流中读取数据。
C 语言中使用 printf() 函数和 scanf() 函数进行格式化的输入输出操作,使用 fprintf() 函数
和 fscanf() 函数进行文件的格式化输入输出操作,使用 fread() 函数和 fwrite() 函数进行二
进制的输入输出操作。
4.格式化输出的不同:
C++ 中的流插入运算符可以使用类似于 printf() 函数的格式化字符串进行格式化输出,也
可以通过流控制符进行格式化输出。
C 语言中的 printf() 函数是通过格式化字符串来控制输出格式的,格式化字符串中以 % 开
头的占位符表示应输出的数据类型和格式。
综上所述,C++ 提供的输入输出操作相比 C 语言更加方便、简单和安全,支持面向对象
编程,而 C 语言的输入输出操作则更加底层、灵活和通用,适合处理底层的二进制数据。
4)什么是流?使用流有那些好处?
流(Stream)是 C++ 标准库中一种用于输入输出的抽象概念,它是一种数据传输方式,可
以将数据从一个设备(如键盘、文件、字符串等)输入到程序中,或将程序中的数据输出到
一个设备中(如屏幕、文件、字符串等)。
流的好处主要有以下几点:
统一的输入输出接口:流提供了统一的输入输出接口,使得程序的输入输出操作变得更加简
单、直观和可读性强。无论是从键盘读取数据、从文件中读取数据,还是将数据输出到屏幕
或文件中,都可以使用相同的流操作进行处理。
面向对象的思想:流是一种面向对象的编程思想,它将数据和数据的处理方式封装在一起,
使得程序更加直观、易于维护和扩展。流的设计符合面向对象的封装、继承、多态等特性,
使得程序的可读性和可维护性大大提高。
安全性和可靠性:流具有安全性和可靠性,可以避免程序在输入输出过程中出现错误和异常
情况。流提供了异常处理机制,当程序在输入输出过程中出现错误时,会抛出异常并终止程
序运行,从而保证程序的安全性和可靠性。
可移植性:流具有良好的可移植性,可以在不同的操作系统和平台上使用相同的流操作进行
输入输出处理。流的设计考虑了不同的操作系统和平台的差异,可以自动进行转换和适配,
使得程序具有更好的可移植性和兼容性。
总之,流是 C++ 标准库中非常重要的一个概念,它提供了一种简单、直观、安全、可靠和
可移植的输入输出方式,是 C++ 程序设计中不可或缺的一部分。
5)C++与定义了那些流?他们分别与什么设备相连?
C++ 标准库定义了多种流,主要包括以下几种:
标准输入流(std::cin):与标准输入设备(通常是键盘)相连,用于从键盘读取数据。
标准输出流(std::cout):与标准输出设备(通常是屏幕)相连,用于向屏幕输出数据。
标准错误流(std::cerr):与标准错误设备(通常也是屏幕)相连,用于向屏幕输出错误信息。
文件输入流(std::ifstream):与文件相连,用于从文件中读取数据。
文件输出流(std::ofstream):与文件相连,用于向文件中写入数据。
字符串流(std::stringstream):与字符串相连,用于将数据读写到字符串中。
这些流都是通过标准库 <iostream> 中定义的,可以通过流对象进行数据的输入输出操作。
例如,可以使用 std::cin 从键盘读取数据,使用 std::cout 将数据输出到屏幕上,使用
std::ifstream 从文件中读取数据,使用 std::ofstream 将数据写入到文件中,等等。
在程序中使用流对象时,需要使用流插入运算符(<<)和流提取运算符(>>) 进行输入输
出操作。例如,下面的代码演示了如何使用 std::cin 和 std::cout 进行输入输出操作:
#include <iostream>
using namespace std;
int main() {
int a;
cout << "Please enter a number: ";
cin >> a;
cout << "The number you entered is: " << a << endl;
return 0;
}
这段代码使用 std::cin 从键盘读取一个整数,使用 std::cout 输出到屏幕上,输出的内容为
用户输入的整数。
C++ 中的流提供了一种方便、灵活和可扩展的输入输出方式,可以与不同的设备进行连接,
使得程序的输入输出操作变得更加简单和安全。
2. 实验二
3.实验基本要求
1) 下面是“平面上点”类的定义:
请完成该类中各成员函数的定义。函数的定义。
完整的“平面上点”类的定义如下,包括各成员函数的定义:
#include <iostream>
using namespace std;
class CPoint
{
private:
int x, y;
static int nCount; // nCount 用于保存点的个数
public:
CPoint(int px = 0, int py = 0) : x(px), y(py) { nCount++; } // 默认构造函数
CPoint(CPoint& p) : x(p.x), y(p.y) { nCount++; } // 拷贝构造函数
~CPoint() { nCount--; } // 析构函数
int GetX() { return x; } // 获取横坐标
int GetY() { return y; } // 获取纵坐标
void SetX(int px) { x = px; } // 设置横坐标
void SetY(int py) { y = py; } // 设置纵坐标
void ShowPoint() { cout << "(" << x << ", " << y << ")" << endl; } // 显示点的坐标
static int GetCount() { return nCount; } // 获取点的个数
};
int CPoint::nCount = 0;
int main()
{
CPoint p1(1, 2);
CPoint p2(3, 4);
CPoint p3(p2);
p1.ShowPoint();
p2.ShowPoint();
p3.ShowPoint();
cout << "点的个数:" << CPoint::GetCount() << endl;
return 0;
}
在上面的代码中,类 CPoint 有两个私有成员变量 x 和 y,表示点的横坐标和纵坐标;还
有一个静态成员变量 nCount,表示创建的点的个数。类中定义了一个默认构造函数、一个
拷贝构造函数和一个析构函数,用于创建和销毁对象。类中还定义了几个公有成员函数,用
于获取或设置点的横坐标和纵坐标,显示点的坐标,以及获取点的个数。
其中,静态成员变量 nCount 是通过在构造函数和析构函数中对其进行修改来统计点的个
数的。静态成员函数 GetCount() 用于获取点的个数,由于它不需要访问类的成员变量,因
此它是一个静态成员函数。
剩余43页未读,继续阅读
资源评论
Hedonelitism
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python 程序语言设计模式思路-行为型模式:策略模式:将算法封装成独立的类,并使它们可以互相替换及支付模式数据压缩
- main.py
- Last Loaded Test.DBK
- Screenshot_20240520_163011.jpg
- ubuntu-python3-whisper-tornado docker镜像 Dockerfile
- ubuntu-python3-whisper-tornado docker镜像07
- 新录音 8.m4a
- ubuntu-python3-whisper-tornado docker镜像
- ubuntu-python3-whisper-tornado docker镜像
- ubuntu-python3-whisper-tornado docker镜像09
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功