在软件开发中,我们经常需要对程序的输出进行验证,以确保其符合预期。为了实现这一目的,我们可以设计一个专门的类来封装输入、预期输出和实际输出的比较逻辑。本文将介绍一个经过修改的test
类,它能够有效地用于程序的最终检查,验证预期输入是否能达到预期输出。
类定义与成员变量
test
类包含以下成员变量:
int inPort
:用于存储预期输入值。int* outPort
:指向实际输出值的指针。int expect
:用于存储预期输出值。
这些成员变量为类的功能提供了基础。
构造函数与析构函数
test
类具有一个默认构造函数,用于初始化成员变量。构造函数将inPort
设置为0,outPort
设置为nullptr
,expect
也设置为0。析构函数目前为空,但保留了其定义,以便在需要时可以轻松地添加清理代码。
成员函数
test
类提供了以下成员函数:
void setIn(int num)
:设置预期输入值。int getOut()
:获取实际输出值。如果outPort
为nullptr
,则抛出一个运行时异常,以避免空指针解引用错误。void setExp(int num)
:设置预期输出值。int getIn()
:获取预期输入值。int getExp()
:获取预期输出值。void setOut(int *p)
:设置指向实际输出值的指针。void judge()
:比较预期输出值和实际输出值。如果它们相等,则输出“ok!”,否则输出“wrong!!”。在比较之前,judge
方法会检查outPort
是否为nullptr
,以避免潜在的错误。
使用示例
以下是一个使用test
类的示例:
#include<iostream>
#include<stdexcept> // 为了使用std::runtime_errorclass test {int inPort;int* outPort;int expect;
public:test(): inPort(0), outPort(nullptr), expect(0) {}~test() {}void setIn(int num) {inPort = num;}int getOut() {if (outPort != nullptr) {return *outPort;} else {throw std::runtime_error("Error: outPort is a null pointer!");}}void setExp(int num) {expect = num;}int getIn() {return inPort;}int getExp() {return expect;}void setOut(int *p) {outPort = p;}void judge() {if (outPort == nullptr) {std::cerr << "Error: Cannot judge, outPort is a null pointer!" << std::endl;return;}if (expect == *outPort) {std::cout << "ok!" << std::endl;} else {std::cout << "wrong!!" << std::endl;}}
};int main() {test p;std::cout << "输入一个数,这个数会自增1" << std::endl;int a = 0;std::cin >> a;p.setIn(a); // 这里我修改了,将用户输入的值直接设置给inPorta++;p.setOut(&a);p.setExp(a); // 这里我也修改了,因为预期结果应该是用户输入值加1try {std::cout << "预期输入值:" << p.getIn() << std::endl;std::cout << "预期结果:" << p.getExp() << std::endl;std::cout << "实际结果:" << p.getOut() << std::endl;p.judge();} catch (const std::runtime_error& e) {std::cerr << e.what() << std::endl;}return 0;
}
在这个示例中,用户输入一个数,程序将其自增1后作为实际输出。然后,我们使用test
类来设置预期输入值、预期输出值和实际输出值,并进行比较。如果比较结果不符合预期,则会抛出异常并输出错误信息。
总结
修改后的test
类为程序的最终检查提供了一个简单而有效的方法。通过封装输入、预期输出和实际输出的比较逻辑,它能够帮助开发者确保代码的正确性。此外,该类的设计也考虑到了健壮性和可读性,使得其在实际应用中更加可靠和易于维护。