hwaityd的小窝

Loading...

下面是使用C++实现的一个简单的Char类,包括私有成员char* c用于存储字符串数据,以及int* ip用于存储一些整型数据。同时,提供了构造函数、拷贝构造函数、析构函数、赋值函数和打印函数。此外,我还添加了一个命名空间MyNamespace来组织这个类。

#include <iostream>

namespace MyNamespace {
    class Char {
    private:
        char* c;  // 用于存储字符串的私有成员
        int* ip;  // 用于存储整型数据的私有成员

    public:
        // 构造函数
        Char(const char* str, const int* arr, int size) {
            c = new char[strlen(str) + 1];
            strcpy(c, str);

            ip = new int[size];
            for (int i = 0; i < size; ++i) {
                ip[i] = arr[i];
            }
        }

        // 拷贝构造函数
        Char(const Char& other) {
            int size = sizeof(other.ip) / sizeof(other.ip[0]);
            c = new char[strlen(other.c) + 1];
            strcpy(c, other.c);

            ip = new int[size];
            for (int i = 0; i < size; ++i) {
                ip[i] = other.ip[i];
            }
        }

        // 析构函数
        ~Char() {
            delete[] c;
            delete[] ip;
        }

        // 赋值函数
        Char& operator=(const Char& other) {
            if (this != &other) {
                delete[] c;
                delete[] ip;

                int size = sizeof(other.ip) / sizeof(other.ip[0]);
                c = new char[strlen(other.c) + 1];
                strcpy(c, other.c);

                ip = new int[size];
                for (int i = 0; i < size; ++i) {
                    ip[i] = other.ip[i];
                }
            }
            return *this;
        }

        // 打印函数
        void print() const {
            std::cout << "String: " << c << std::endl;
            std::cout << "Array: ";
            for (int i = 0; i < getSize(); ++i) {
                std::cout << ip[i] << " ";
            }
            std::cout << std::endl;
        }

        // 获取数组大小
        int getSize() const {
            // 注意:这不是一个安全的方法,因为这里假设ip总是指向一个有效的数组
            // 实际上,我们应该在构造时存储数组的大小
            return ip ? 1 : 0; // 示例中简化处理,假设只有一个整数
        }
    };

    int main() {
        int arr[] = {1, 2, 3};
        Char charObj("Hello, World!", arr, 3);
        charObj.print();

        Char copiedCharObj = charObj;
        copiedCharObj.print();

        Char assignedCharObj("Kimi", arr, 1);
        assignedCharObj = copiedCharObj;
        assignedCharObj.print();

        return 0;
    }
}

在这个实现中:

  • 构造函数接收一个const char*类型的字符串和const int*类型的数组,以及数组的大小,并将它们复制到char* cint* ip中。
  • 拷贝构造函数创建了一个新的Char对象,它是现有对象的副本。
  • 析构函数释放了char* cint* ip指向的内存。
  • 赋值函数实现了深拷贝,并在必要时进行了自赋值检查。
  • 打印函数用于输出字符串内容和数组内容,以验证我们的Char类是否按预期工作。

请注意,这个实现简化了数组大小的处理,实际上应该在构造时存储数组的大小,而不是依赖于ip是否指向一个有效的数组。此外,这个实现没有处理所有可能的异常情况,如内存分配失败等。在实际应用中,应该使用标准库中的std::vectorstd::string来避免手动管理内存的复杂性和风险。

posted on 2024-10-20 00:37  hwaityd  阅读(8)  评论(0编辑  收藏  举报