bin554385863 发表于 2019-11-18 23:26:35

C++类的简单练习后期慢慢丰富方法

本帖最后由 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;
      for (size_t i = 0; i < LENGTH; i++)
      {
            ARRAY = *(list.begin() + i);
      }
    }
    /*********************************************************************/
    carray(carray<tp> &arr) //复制构造
    {
      LENGTH = arr.LENGTH;
      ARRAY = new tp ;
      for (size_t i = 0; i < LENGTH; i++)
      {
            *(ARRAY+i) = arr;
      }
    }
    /*********************************************************************/
    void pushback(tp data)
    {
      tp *t_ARRAY = new tp;
      for (size_t i = 0; i < LENGTH; i++)
      {
            t_ARRAY = ARRAY;
      }
      t_ARRAY = data;
      LENGTH += 1;
      delete[] ARRAY;
      ARRAY = t_ARRAY;
    }
    /*********************************************************************/
    size_t size()
    {
      return LENGTH;
    }
    /*********************************************************************/
    tp operator[](const size_t i) //重载索引下标符号[]
    {
      return ARRAY;
    }
    /*********************************************************************/
    friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
    {
      for (size_t i = 0; i < arr.size(); i++)
      {
            os << arr;
      }
      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;
//   }
//   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>
----------------------------------------------------------------------------------------------------------

人造人 发表于 2019-11-19 00:22:52

第82行报错了
^_^

人造人 发表于 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;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        ARRAY = *(list.begin() + i);
                }
        }
        /*********************************************************************/
        carray(carray<tp> &arr) //复制构造
        {
                LENGTH = arr.LENGTH;
                ARRAY = new tp;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        *(ARRAY + i) = arr;
                }
        }
        /*********************************************************************/
        void pushback(tp data)
        {
                tp *t_ARRAY = new tp;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        t_ARRAY = ARRAY;
                }
                t_ARRAY = data;
                LENGTH += 1;
                delete[] ARRAY;
                ARRAY = t_ARRAY;
        }
        /*********************************************************************/
        size_t size()
        {
                return LENGTH;
        }
        /*********************************************************************/
        tp operator[](const size_t i) //重载索引下标符号[]
        {
                return ARRAY;
        }
        /*********************************************************************/
        friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
        {
                for(size_t i = 0; i < arr.size(); i++)
                {
                        os << arr;
                }
                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 << std::endl;
        arr = 100;
        return 0;
}

人造人 发表于 2019-11-19 00:24:21

@小甲鱼
这图片就不能弄高清一点吗?都快看不清字了
^_^

bin554385863 发表于 2019-11-19 00:30:21

本帖最后由 bin554385863 于 2019-11-19 00:32 编辑

人造人 发表于 2019-11-19 00:24
@小甲鱼
这图片就不能弄高清一点吗?都快看不清字了
^_^

图片眼都花了.
我还没写这个方法呢{:10_256:}

人造人 发表于 2019-11-19 00:32:28

bin554385863 发表于 2019-11-19 00:30
眼都花了

代码已经附上,82行报错,这是你想要的结果吗?
^_^

人造人 发表于 2019-11-19 00:34:15

bin554385863 发表于 2019-11-19 00:30
图片眼都花了.
我还没写这个方法呢


tp operator[](const size_t i) //重载索引下标符号[]
{
      return ARRAY;
}

{:10_256:}

bin554385863 发表于 2019-11-19 00:34:29

人造人 发表于 2019-11-19 00:32
代码已经附上,82行报错,这是你想要的结果吗?
^_^

单个元素赋值我还没写呢{:10_266:}

人造人 发表于 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;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        ARRAY = *(list.begin() + i);
                }
        }
        /*********************************************************************/
        carray(carray<tp> &arr) //复制构造
        {
                LENGTH = arr.LENGTH;
                ARRAY = new tp;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        *(ARRAY + i) = arr;
                }
        }
        /*********************************************************************/
        void pushback(tp data)
        {
                tp *t_ARRAY = new tp;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        t_ARRAY = ARRAY;
                }
                t_ARRAY = data;
                LENGTH += 1;
                delete[] ARRAY;
                ARRAY = t_ARRAY;
        }
        /*********************************************************************/
        size_t size()
        {
                return LENGTH;
        }
        /*********************************************************************/
        tp &operator[](const size_t i) //重载索引下标符号[]
        {
                return ARRAY;
        }
        /*********************************************************************/
        friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
        {
                for(size_t i = 0; i < arr.size(); i++)
                {
                        os << arr;
                }
                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 << std::endl;
        arr = 100;
        return 0;
}


^_^

人造人 发表于 2019-11-19 00:36:04

      tp &operator[](const size_t i) //重载索引下标符号[]
      {
                return ARRAY;
      }

bin554385863 发表于 2019-11-19 00:43:45

人造人 发表于 2019-11-19 00:36


....我想想咋写

人造人 发表于 2019-11-19 00:45:18

bin554385863 发表于 2019-11-19 00:43
....我想想咋写

试一下这个代码
^_^

#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;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        ARRAY = *(list.begin() + i);
                }
      }
      /*********************************************************************/
      carray(carray<tp> &arr) //复制构造
      {
                LENGTH = arr.LENGTH;
                ARRAY = new tp;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        *(ARRAY + i) = arr;
                }
      }
      /*********************************************************************/
      void pushback(tp data)
      {
                tp *t_ARRAY = new tp;
                for(size_t i = 0; i < LENGTH; i++)
                {
                        t_ARRAY = ARRAY;
                }
                t_ARRAY = data;
                LENGTH += 1;
                delete[] ARRAY;
                ARRAY = t_ARRAY;
      }
      /*********************************************************************/
      size_t size()
      {
                return LENGTH;
      }
      /*********************************************************************/
      tp &operator[](const size_t i) //重载索引下标符号[]
      {
                return ARRAY;
      }
      /*********************************************************************/
      friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
      {
                for(size_t i = 0; i < arr.size(); i++)
                {
                        os << arr;
                }
                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 << std::endl;
      arr = 100;
      return 0;
}

bin554385863 发表于 2019-11-19 00:56:48

本帖最后由 bin554385863 于 2019-11-19 00:58 编辑

人造人 发表于 2019-11-19 00:45
试一下这个代码
^_^

这个可以的,
换成引用就行了.......
MMP,我怕是糊涂了,引用可以像指针一样修改变量的值

人造人 发表于 2019-11-19 00:59:24

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

^_^

bin554385863 发表于 2019-11-19 01:17:04

本帖最后由 bin554385863 于 2019-11-19 10:48 编辑

人造人 发表于 2019-11-19 00:59
^_^

{:5_109:}
谢谢
写着个就是为了检验一下类学的咋样
构造
析构
运算符重载
new, delete运算符
还有剩下的类的静态成员
页: [1]
查看完整版本: C++类的简单练习后期慢慢丰富方法