c++合理设计一个类,该类需要对数据成员进行合法性验证(比 如性别只能是男、女,电话号码不能超过11位等,身份证号码 是否真实有效)、初始化、修改、获、输出等基本操作外, 还应能完成其他一些合理的功能操作
时间: 2024-10-17 07:08:30 浏览: 40
在C++中,设计一个包含数据验证的类,首先我们需要考虑的是数据封装和异常处理。下面是一个简单的例子,展示如何设计一个名为`Person`的类,用于存储个人信息并包含相应的验证机制:
```cpp
#include <iostream>
#include <string>
#include <regex>
class Person {
private:
std::string name;
std::string gender;
std::string phoneNumber;
std::string idNumber;
// 正则表达式,用于验证性别和电话号码
static const std::regex GenderRegex{"^(男|女)$"};
static const std::regex PhoneNumberRegex{std::regex("^[0-9]{7,11}$")};
public:
// 构造函数进行基本验证
Person(const std::string& name, const std::string& gender, const std::string& phoneNumber, const std::string& idNumber)
: name(name), gender(gender), phoneNumber(phoneNumber), idNumber(idNumber) {
validateData();
}
// 数据成员获取
std::string getName() const { return name; }
std::string getGender() const { return gender; }
std::string getPhoneNumber() const { return phoneNumber; }
std::string getIdNumber() const { return idNumber; }
// 数据成员修改,内部调用验证
void setName(const std::string& newName) {
name = newName;
validateData();
}
void setGender(const std::string& newGender) {
if (GenderRegex.match(newGender)) {
gender = newGender;
} else {
throw std::invalid_argument("Invalid gender");
}
}
void setPhoneNumber(const std::string& newPhoneNumber) {
if (PhoneNumberRegex.match(newPhoneNumber)) {
phoneNumber = newPhoneNumber;
} else {
throw std::invalid_argument("Invalid phone number");
}
}
void setIdNumber(const std::string& newIdNumber) {
// 实现更复杂的身份证校验,例如检查长度和格式
// 如果验证通过,更新idNumber;否则抛出异常
}
// 输出信息
void displayInfo() const {
std::cout << "Name: " << name << "\n";
std::cout << "Gender: " << gender << "\n";
std::cout << "Phone Number: " << phoneNumber << "\n";
std::cout << "ID Number: " << idNumber << "\n";
}
private:
// 验证数据成员的函数
void validateData() {
// 进行性别和电话号码的基本验证
if (!GenderRegex.match(gender)) {
throw std::invalid_argument("Invalid gender");
}
if (!PhoneNumberRegex.match(phoneNumber)) {
throw std::invalid_argument("Invalid phone number");
}
}
};
```
在这个`Person`类中,我们添加了构造函数进行初始验证,并在设置数据成员时再次进行验证。如果输入的数据不符合规范,会抛出异常。同时,我们也提供了一些基础的获取和输出信息的方法。
阅读全文