贵州大学oj C++ 第四章 DataType

这个博客介绍了一个名为DataType的类,该类利用C++的枚举和联合来处理字符型、整型和浮点型数据。类中定义了枚举变量TYPE来表示数据类型,并通过联合体DATA存储不同类型的数据。DataType类提供了针对不同数据类型的构造函数以及Show方法来展示数据。在主函数中,分别创建了处理字符、整数和浮点数的DataType对象并显示其内容。

定义一个 DataType(数据类型)类,能处理包含字符型、整型、浮点型3种类型的数据,给出其构造函数。

输入描述无

输出描述输出所输入的数据

提示主函数已给出,只需写出DataType类的代码即可,代码中的 类名、方法名、参数名已经指定,请勿修改。

class DataType
{
private:
    enum TYPE { INT, CHAR, FLOAT };//已知所处理类型只有3种可能,运用枚举类型
    //也可不用枚举类型
    union DATA
    {
        int i;
        char c;
        double f;
    };
    TYPE type;
    DATA data;
public:
    DataType(int i)
    {
        
   
### 贵州大学 OJ C++ 题库及答案解析 关于贵州大学OJ平台上的C++题库,通常情况下,OJ平台的题目设计是为了帮助学生巩固编程基础、掌握特定知识点以及提高算法能力。以下是对C++题库中可能涉及的内容及其解答思路的分析。 #### 1. **运算符重载** 在C++中,运算符重载是一种重要的特性,允许用户定义或修改某些运算符的行为。例如,`<<` 运算符可以被重载为输出自定义对象的格式[^1]。以下是 `operator<<` 的一个典型实现示例: ```cpp class Matrix { private: int rows, columns; int** arr; public: Matrix(int r, int c) : rows(r), columns(c) { arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[columns]; } } ~Matrix() { for (int i = 0; i < rows; ++i) { delete[] arr[i]; } delete[] arr; } int getRows() const { return rows; } int getColumns() const { return columns; } int** getData() { return arr; } friend std::ostream& operator<<(std::ostream& out, const Matrix& m); }; std::ostream& operator<<(std::ostream& out, const Matrix& m) { for (int i = 0; i < m.rows; ++i) { for (int j = 0; j < m.columns; ++j) { out << m.arr[i][j] << " "; } out << std::endl; } return out; } ``` 上述代码展示了如何通过友元函数重载 `<<` 运算符,以便以特定格式输出矩阵内容[^1]。 #### 2. **常见题型及解答思路** - **输入输出流重载**:如上所述,可以通过重载 `<<` 和 `>>` 运算符实现自定义对象的输入和输出。 - **构造与析构函数**:确保动态分配内存时正确管理资源,避免内存泄漏。 - **拷贝构造函数与赋值运算符**:当对象之间进行复制操作时,需要深拷贝以避免浅拷贝带来的问题。 - **模板类与泛型编程**:使用模板类实现通用数据结构,如栈、队列等。 #### 3. **查找具体题目与答案** 由于贵州大学OJ平台的具体题目可能需要登录账号访问,以下是一些可能的题目类型及其解答思路: ##### 示例题目 1:矩阵加法 给定两个矩阵,编写程序实现它们的加法操作,并输出结果。 ```cpp #include <iostream> using namespace std; class Matrix { private: int rows, columns; int** arr; public: Matrix(int r, int c) : rows(r), columns(c) { arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[columns]; } } ~Matrix() { for (int i = 0; i < rows; ++i) { delete[] arr[i]; } delete[] arr; } void setElement(int i, int j, int value) { arr[i][j] = value; } int getElement(int i, int j) const { return arr[i][j]; } int getRows() const { return rows; } int getColumns() const { return columns; } friend Matrix operator+(const Matrix& m1, const Matrix& m2); friend ostream& operator<<(ostream& out, const Matrix& m); }; Matrix operator+(const Matrix& m1, const Matrix& m2) { Matrix result(m1.rows, m1.columns); for (int i = 0; i < m1.rows; ++i) { for (int j = 0; j < m1.columns; ++j) { result.setElement(i, j, m1.getElement(i, j) + m2.getElement(i, j)); } } return result; } ostream& operator<<(ostream& out, const Matrix& m) { for (int i = 0; i < m.rows; ++i) { for (int j = 0; j < m.columns; ++j) { out << m.getElement(i, j) << " "; } out << endl; } return out; } int main() { Matrix m1(2, 2), m2(2, 2); m1.setElement(0, 0, 1); m1.setElement(0, 1, 2); m1.setElement(1, 0, 3); m1.setElement(1, 1, 4); m2.setElement(0, 0, 5); m2.setElement(0, 1, 6); m2.setElement(1, 0, 7); m2.setElement(1, 1, 8); Matrix sum = m1 + m2; cout << "Sum of matrices:\n" << sum; return 0; } ``` ##### 示例题目 2:字符串比较 编写程序实现两个字符串的比较功能,支持大小写敏感或不敏感选项。 ```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; bool compareStrings(const string& s1, const string& s2, bool caseSensitive = true) { if (!caseSensitive) { string lowerS1 = s1, lowerS2 = s2; transform(lowerS1.begin(), lowerS1.end(), lowerS1.begin(), ::tolower); transform(lowerS2.begin(), lowerS2.end(), lowerS2.begin(), ::tolower); return lowerS1 == lowerS2; } return s1 == s2; } int main() { string str1, str2; cout << "Enter first string: "; getline(cin, str1); cout << "Enter second string: "; getline(cin, str2); bool caseInsensitive; cout << "Case insensitive comparison? (1 for yes, 0 for no): "; cin >> caseInsensitive; if (compareStrings(str1, str2, !caseInsensitive)) { cout << "Strings are equal." << endl; } else { cout << "Strings are not equal." << endl; } return 0; } ``` #### 注意事项 - 提交代码时,请确保遵守OJ平台的编码规范,包括但不限于命名规则、注释要求等。 - 测试用例应覆盖所有边界条件,例如空矩阵、不同维度的矩阵相加等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值