day8: homework

This commit is contained in:
flykhan 2023-08-02 20:48:31 +08:00
parent 606fbc6ff1
commit 8c46e7a977
7 changed files with 252 additions and 0 deletions

33
day8/homework/h1.cpp Normal file
View File

@ -0,0 +1,33 @@
// const修饰的成员虚函数能否在子类中重写请举例说明
// 可以
#include <bits/stdc++.h>
using namespace std;
class A
{
public:
virtual void show() const
{
cout << "A" << endl;
}
};
class B : public A
{
public:
virtual void show() const override
{
cout << "B" << endl;
}
};
int main()
{
A *p = new B;
p->show(); // B
B *q = new B;
q->show(); // B
return 0;
}

34
day8/homework/h2.cpp Normal file
View File

@ -0,0 +1,34 @@
// throw() 和throw有什么区别请举例说明
// 1. throw()是函数声明,表示该函数不会抛出任何异常
// 2. throw是抛出异常的关键字
// 3. throw()是函数声明throw是语句
#include <bits/stdc++.h>
using namespace std;
void show(int n) throw() // throw() 表示异常抛出限制: 不抛出任何异常
// void show(int n) throw(int ) // throw(int) 表示只抛出 int 类型的异常
{
if (n == 0)
{
throw 0; // throw 0 表示抛出 int 类型的异常
}
cout << "n = " << n << endl;
}
int main()
{
try
{
show(0);
}
catch (const int &e)
{
cout << "捕获异常: " << e << endl;
}
catch (...)
{
cout << "捕获其他异常" << endl;
}
return 0;
}

58
day8/homework/h3.cpp Normal file
View File

@ -0,0 +1,58 @@
// 编写一个C++ 程序,读取一个文件的内容并打印到控制台。 在文件读取过程中处理以下异常情况: 1如果文件打开失败则抛出一个自定义的异常对象 FileOpenException。 2如果文件读取过程中发生错误则抛出一个自定义的异常对象 FileReadException。
// 【要求】在 main 函数中调用文件读取函数,并捕获并处理可能抛出的异常。
#include <bits/stdc++.h>
using namespace std;
// 自定义异常类
class FileOpenException : public exception
{
public:
const char *what() const throw()
{
return "文件打开异常";
}
};
class FileReadException : public exception
{
public:
const char *what() const throw()
{
return "文件读取异常";
}
};
int main()
{
FILE *fp = fopen("test.txt", "r");
try
{
if (fp == NULL)
{
throw FileOpenException(); // 抛出自定义文件打开异常
}
}
catch (exception &e)
{
cout << "捕获异常: " << e.what() << endl;
}
char ch;
try
{
// EOF 表示到达文件结尾
if (fscanf(fp, "%c", &ch) == EOF)
throw FileReadException(); // 抛出自定义文件读取异常
}
catch (exception &e)
{
cout << "捕获异常: " << e.what() << endl;
}
fclose(fp);
return 0;
}

54
day8/homework/h4.cpp Normal file
View File

@ -0,0 +1,54 @@
// 编写一个C++ 程序,动态分配一个整型数组,并根据用户输入的索引值访问数组元素。 在访问数组元素时处理以下异常情况: 1如果数组分配内存失败则抛出一个自定义的异常对象 MemoryAllocationException。 2如果用户输入的索引超出了数组的范围则抛出一个自定义的异常对象 IndexOutOfBoundsException。
// 【要求】在 main 函数中调用动态内存分配函数,并捕获并处理可能抛出的异常。
#include <bits/stdc++.h>
using namespace std;
// 自定义异常类
class MemoryAllocationException : public exception
{
public:
const char *what() const throw()
{
return "内存分配异常";
}
};
class IndexOutOfBoundsException : public exception
{
public:
const char *what() const throw()
{
return "索引越界异常";
}
};
int main()
{
int *arr = new int[10]; // 动态分配一个整型数组
try
{
if (arr == NULL)
throw MemoryAllocationException();
// 当不抛出异常时,继续执行数组的赋值操作
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4; // 其余元素会被初始化为 0
int n;
cout << "请输入索引值: ";
cin >> n;
if (n < 0 || n > 9)
throw IndexOutOfBoundsException();
// 当不抛出异常时,继续执行数组的访问操作
cout << "arr[" << n << "] = " << arr[n] << endl;
}
catch (exception &e)
{
cout << "捕获异常: " << e.what() << endl;
}
return 0;
}

39
day8/homework/h5.cpp Normal file
View File

@ -0,0 +1,39 @@
// 编写一个C++ 函数 divideNumbers接受两个整数作为参数并返回它们的商。 在函数中处理以下异常情况: 1如果除数为0则抛出 std::logic_error 异常类的一个实例,并传递适当的错误消息。 2如果被除数为0则抛出 std::runtime_error 异常类的一个实例,并传递适当的错误消息。
// 【要求】在 main 函数中调用 divideNumbers并捕获并处理可能抛出的异常。
#include <bits/stdc++.h>
using namespace std;
int divideNumbers(int a, int b)
{
if (b == 0)
throw std::logic_error("除数为0");
if (a == 0)
throw std::runtime_error("被除数为0");
return a / b; // 结果为整数商
}
int main()
{
try
{
cout << "请输入两个整数:" << endl;
int a, b;
cin >> a >> b;
cout << a << "" << b << " 的商为:" << divideNumbers(a, b) << endl;
}
catch (const std::logic_error &e)
{
cout << "捕获异常:" << e.what() << endl;
}
catch (const std::runtime_error &e)
{
cout << "捕获异常:" << e.what() << endl;
}
catch (...)
{
cout << "捕获其他异常" << endl;
}
return 0;
}

33
day8/homework/h6.cpp Normal file
View File

@ -0,0 +1,33 @@
// 编写一个C++ 程序,读取一个文件的内容并打印到控制台。 在文件读取过程中处理以下异常情况: 1如果文件打开失败则抛出 std::runtime_error 异常类的一个实例,并传递适当的错误消息。 2如果文件读取过程中发生错误则抛出 std::ios_base::failure 异常类的一个实例,并传递适当的错误消息。
// 【要求】在 main 函数中调用文件读取函数,并捕获并处理可能抛出的异常。
#include <bits/stdc++.h>
using namespace std;
int main()
{
FILE *fp = fopen("test.txt", "r");
try
{
if (fp == NULL)
throw std::runtime_error("文件打开异常");
}
catch (const std::runtime_error &e)
{
cout << "捕获异常:" << e.what() << endl;
}
char ch;
try
{
if (fscanf(fp, "%c", &ch) == EOF)
throw std::ios_base::failure("文件读取异常");
}
catch (const std::ios_base::failure &e)
{
cout << "捕获异常:" << e.what() << endl;
}
fclose(fp);
return 0;
}

1
day8/homework/test.txt Normal file
View File

@ -0,0 +1 @@
helloworld