day8: homework
This commit is contained in:
parent
606fbc6ff1
commit
8c46e7a977
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
helloworld
|
Loading…
Reference in New Issue