鱼C论坛

 找回密码
 立即注册
查看: 1639|回复: 14

[技术交流] C++类的简单练习后期慢慢丰富方法

[复制链接]
发表于 2019-11-18 23:26:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 bin554385863 于 2019-11-19 00:21 编辑
#include <iostream>
#include <initializer_list>
template <typename tp>
class carray
{
private:
    tp *ARRAY;
    size_t LENGTH;
public:
    /*********************************************************************/
    carray() : ARRAY(nullptr), LENGTH(0) {} //默认构造
    /*********************************************************************/
    carray(std::initializer_list<tp> list) : LENGTH(list.size()) //普通构造
    {
        ARRAY = new tp[LENGTH];
        for (size_t i = 0; i < LENGTH; i++)
        {
            ARRAY[i] = *(list.begin() + i);
        }
    }
    /*********************************************************************/
    carray(carray<tp> &arr) //复制构造
    {
        LENGTH = arr.LENGTH;
        ARRAY = new tp [LENGTH];
        for (size_t i = 0; i < LENGTH; i++)
        {
            *(ARRAY+i) = arr[i];
        }
    }
    /*********************************************************************/
    void pushback(tp data)
    {
        tp *t_ARRAY = new tp[LENGTH + 1];
        for (size_t i = 0; i < LENGTH; i++)
        {
            t_ARRAY[i] = ARRAY[i];
        }
        t_ARRAY[LENGTH] = data;
        LENGTH += 1;
        delete[] ARRAY;
        ARRAY = t_ARRAY;
    }
    /*********************************************************************/
    size_t size()
    {
        return LENGTH;
    }
    /*********************************************************************/
    tp operator[](const size_t i) //重载索引下标符号[]
    {
        return ARRAY[i];
    }
    /*********************************************************************/
    friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
    {
        for (size_t i = 0; i < arr.size(); i++)
        {
            os << arr[i];
        }
        return os;
    }
    /*********************************************************************/
    ~carray()
    {
        delete[] ARRAY;
    }
};
// template <typename tp>
// std::ostream &operator<<(std::ostream &os, carray<tp> &arr)
// {
//     size_t sz = arr.size();
//     for (size_t i = 0; i < sz; i++)
//     {
//         os << arr[i];
//     }
//     return os;
// }
int main(int argc, char const *argv[])
{
    carray<int> arr = {0};
    std::cout << arr << " " << arr.size() << std::endl;
    arr.pushback(999);
    std::cout << arr << " " << arr.size() << std::endl;
    carray<int> t_arr = arr;
    std::cout << t_arr << " " << t_arr.size() << std::endl;
    return 0;
}
-------------------------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-3s3sbjmi.ihk --stdout=Microsoft-MIEngine-Out-a4bdh2dw.pub --stderr=Microsoft-MIEngine-Error-y55is3ur.rkh --pid=Microsoft-MIEngine-Pid-kx3esz3t.ch1 --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
0 1
0999 2
0999 2


E:\Users\admin\Documents\VScode>

----------------------------------------------------------------------------------------------------------
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-19 00:22:52 | 显示全部楼层
第82行报错了
^_^

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:23:34 | 显示全部楼层
#include <iostream>
#include <initializer_list>
template <typename tp>
class carray
{
private:
        tp *ARRAY;
        size_t LENGTH;
public:
        /*********************************************************************/
        carray(): ARRAY(nullptr), LENGTH(0) {} //默认构造
        /*********************************************************************/
        carray(std::initializer_list<tp> list): LENGTH(list.size()) //普通构造
        {
                ARRAY = new tp[LENGTH];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        ARRAY[i] = *(list.begin() + i);
                }
        }
        /*********************************************************************/
        carray(carray<tp> &arr) //复制构造
        {
                LENGTH = arr.LENGTH;
                ARRAY = new tp[LENGTH];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        *(ARRAY + i) = arr[i];
                }
        }
        /*********************************************************************/
        void pushback(tp data)
        {
                tp *t_ARRAY = new tp[LENGTH + 1];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        t_ARRAY[i] = ARRAY[i];
                }
                t_ARRAY[LENGTH] = data;
                LENGTH += 1;
                delete[] ARRAY;
                ARRAY = t_ARRAY;
        }
        /*********************************************************************/
        size_t size()
        {
                return LENGTH;
        }
        /*********************************************************************/
        tp operator[](const size_t i) //重载索引下标符号[]
        {
                return ARRAY[i];
        }
        /*********************************************************************/
        friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
        {
                for(size_t i = 0; i < arr.size(); i++)
                {
                        os << arr[i];
                }
                return os;
        }
        /*********************************************************************/
        ~carray()
        {
                delete[] ARRAY;
        }
};
int main(int argc, char const *argv[])
{
        carray<int> arr = {0};
        std::cout << arr << " " << arr.size() << std::endl;
        arr.pushback(999);
        std::cout << arr << " " << arr.size() << std::endl;
        carray<int> t_arr = arr;
        std::cout << t_arr << " " << t_arr.size() << std::endl;

        arr.pushback(123);
        arr.pushback(456);
        arr.pushback(789);
        std::cout << arr[0] << std::endl;
        arr[1] = 100;
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:24:21 | 显示全部楼层
@小甲鱼
这图片就不能弄高清一点吗?都快看不清字了
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-19 00:30:21 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-19 00:32 编辑
人造人 发表于 2019-11-19 00:24
@小甲鱼
这图片就不能弄高清一点吗?都快看不清字了
^_^


图片眼都花了.
我还没写这个方法呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:32:28 | 显示全部楼层

代码已经附上,82行报错,这是你想要的结果吗?
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:34:15 | 显示全部楼层
bin554385863 发表于 2019-11-19 00:30
图片眼都花了.
我还没写这个方法呢
tp operator[](const size_t i) //重载索引下标符号[]
{
        return ARRAY[i];
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-19 00:34:29 | 显示全部楼层
人造人 发表于 2019-11-19 00:32
代码已经附上,82行报错,这是你想要的结果吗?
^_^

单个元素赋值我还没写呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:35:33 | 显示全部楼层
bin554385863 发表于 2019-11-19 00:34
单个元素赋值我还没写呢
#include <iostream>
#include <initializer_list>
template <typename tp>
class carray
{
private:
        tp *ARRAY;
        size_t LENGTH;
public:
        /*********************************************************************/
        carray(): ARRAY(nullptr), LENGTH(0) {} //默认构造
        /*********************************************************************/
        carray(std::initializer_list<tp> list): LENGTH(list.size()) //普通构造
        {
                ARRAY = new tp[LENGTH];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        ARRAY[i] = *(list.begin() + i);
                }
        }
        /*********************************************************************/
        carray(carray<tp> &arr) //复制构造
        {
                LENGTH = arr.LENGTH;
                ARRAY = new tp[LENGTH];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        *(ARRAY + i) = arr[i];
                }
        }
        /*********************************************************************/
        void pushback(tp data)
        {
                tp *t_ARRAY = new tp[LENGTH + 1];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        t_ARRAY[i] = ARRAY[i];
                }
                t_ARRAY[LENGTH] = data;
                LENGTH += 1;
                delete[] ARRAY;
                ARRAY = t_ARRAY;
        }
        /*********************************************************************/
        size_t size()
        {
                return LENGTH;
        }
        /*********************************************************************/
        tp &operator[](const size_t i) //重载索引下标符号[]
        {
                return ARRAY[i];
        }
        /*********************************************************************/
        friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
        {
                for(size_t i = 0; i < arr.size(); i++)
                {
                        os << arr[i];
                }
                return os;
        }
        /*********************************************************************/
        ~carray()
        {
                delete[] ARRAY;
        }
};
int main(int argc, char const *argv[])
{
        carray<int> arr = {0};
        std::cout << arr << " " << arr.size() << std::endl;
        arr.pushback(999);
        std::cout << arr << " " << arr.size() << std::endl;
        carray<int> t_arr = arr;
        std::cout << t_arr << " " << t_arr.size() << std::endl;

        arr.pushback(123);
        arr.pushback(456);
        arr.pushback(789);
        std::cout << arr[0] << std::endl;
        arr[1] = 100;
        return 0;
}

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:36:04 | 显示全部楼层
        tp &operator[](const size_t i) //重载索引下标符号[]
        {
                return ARRAY[i];
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-19 00:43:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:45:18 | 显示全部楼层


试一下这个代码
^_^
#include <iostream>
#include <initializer_list>
template <typename tp>
class carray
{
private:
        tp *ARRAY;
        size_t LENGTH;
public:
        /*********************************************************************/
        carray(): ARRAY(nullptr), LENGTH(0) {} //默认构造
        /*********************************************************************/
        carray(std::initializer_list<tp> list): LENGTH(list.size()) //普通构造
        {
                ARRAY = new tp[LENGTH];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        ARRAY[i] = *(list.begin() + i);
                }
        }
        /*********************************************************************/
        carray(carray<tp> &arr) //复制构造
        {
                LENGTH = arr.LENGTH;
                ARRAY = new tp[LENGTH];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        *(ARRAY + i) = arr[i];
                }
        }
        /*********************************************************************/
        void pushback(tp data)
        {
                tp *t_ARRAY = new tp[LENGTH + 1];
                for(size_t i = 0; i < LENGTH; i++)
                {
                        t_ARRAY[i] = ARRAY[i];
                }
                t_ARRAY[LENGTH] = data;
                LENGTH += 1;
                delete[] ARRAY;
                ARRAY = t_ARRAY;
        }
        /*********************************************************************/
        size_t size()
        {
                return LENGTH;
        }
        /*********************************************************************/
        tp &operator[](const size_t i) //重载索引下标符号[]
        {
                return ARRAY[i];
        }
        /*********************************************************************/
        friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
        {
                for(size_t i = 0; i < arr.size(); i++)
                {
                        os << arr[i];
                }
                return os;
        }
        /*********************************************************************/
        ~carray()
        {
                delete[] ARRAY;
        }
};
int main(int argc, char const *argv[])
{
        carray<int> arr = {0};
        std::cout << arr << " " << arr.size() << std::endl;
        arr.pushback(999);
        std::cout << arr << " " << arr.size() << std::endl;
        carray<int> t_arr = arr;
        std::cout << t_arr << " " << t_arr.size() << std::endl;

        arr.pushback(123);
        arr.pushback(456);
        arr.pushback(789);
        std::cout << arr[0] << std::endl;
        arr[1] = 100;
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-19 00:56:48 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-19 00:58 编辑
人造人 发表于 2019-11-19 00:45
试一下这个代码
^_^


这个可以的,
换成引用就行了.......
MMP,我怕是糊涂了,引用可以像指针一样修改变量的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-19 00:59:24 | 显示全部楼层
bin554385863 发表于 2019-11-19 00:56
这个可以的,
换成引用就行了.......
MMP,我怕是糊涂了,引用可以像指针一样修改变量的值

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-19 01:17:04 | 显示全部楼层
本帖最后由 bin554385863 于 2019-11-19 10:48 编辑



谢谢
写着个就是为了检验一下类学的咋样
构造
析构
运算符重载
new, delete运算符
还有剩下的类的静态成员
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表