鱼C论坛

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

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

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

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

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

x
本帖最后由 bin554385863 于 2019-11-19 00:21 编辑
  1. #include <iostream>
  2. #include <initializer_list>
  3. template <typename tp>
  4. class carray
  5. {
  6. private:
  7.     tp *ARRAY;
  8.     size_t LENGTH;
  9. public:
  10.     /*********************************************************************/
  11.     carray() : ARRAY(nullptr), LENGTH(0) {} //默认构造
  12.     /*********************************************************************/
  13.     carray(std::initializer_list<tp> list) : LENGTH(list.size()) //普通构造
  14.     {
  15.         ARRAY = new tp[LENGTH];
  16.         for (size_t i = 0; i < LENGTH; i++)
  17.         {
  18.             ARRAY[i] = *(list.begin() + i);
  19.         }
  20.     }
  21.     /*********************************************************************/
  22.     carray(carray<tp> &arr) //复制构造
  23.     {
  24.         LENGTH = arr.LENGTH;
  25.         ARRAY = new tp [LENGTH];
  26.         for (size_t i = 0; i < LENGTH; i++)
  27.         {
  28.             *(ARRAY+i) = arr[i];
  29.         }
  30.     }
  31.     /*********************************************************************/
  32.     void pushback(tp data)
  33.     {
  34.         tp *t_ARRAY = new tp[LENGTH + 1];
  35.         for (size_t i = 0; i < LENGTH; i++)
  36.         {
  37.             t_ARRAY[i] = ARRAY[i];
  38.         }
  39.         t_ARRAY[LENGTH] = data;
  40.         LENGTH += 1;
  41.         delete[] ARRAY;
  42.         ARRAY = t_ARRAY;
  43.     }
  44.     /*********************************************************************/
  45.     size_t size()
  46.     {
  47.         return LENGTH;
  48.     }
  49.     /*********************************************************************/
  50.     tp operator[](const size_t i) //重载索引下标符号[]
  51.     {
  52.         return ARRAY[i];
  53.     }
  54.     /*********************************************************************/
  55.     friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
  56.     {
  57.         for (size_t i = 0; i < arr.size(); i++)
  58.         {
  59.             os << arr[i];
  60.         }
  61.         return os;
  62.     }
  63.     /*********************************************************************/
  64.     ~carray()
  65.     {
  66.         delete[] ARRAY;
  67.     }
  68. };
  69. // template <typename tp>
  70. // std::ostream &operator<<(std::ostream &os, carray<tp> &arr)
  71. // {
  72. //     size_t sz = arr.size();
  73. //     for (size_t i = 0; i < sz; i++)
  74. //     {
  75. //         os << arr[i];
  76. //     }
  77. //     return os;
  78. // }
  79. int main(int argc, char const *argv[])
  80. {
  81.     carray<int> arr = {0};
  82.     std::cout << arr << " " << arr.size() << std::endl;
  83.     arr.pushback(999);
  84.     std::cout << arr << " " << arr.size() << std::endl;
  85.     carray<int> t_arr = arr;
  86.     std::cout << t_arr << " " << t_arr.size() << std::endl;
  87.     return 0;
  88. }
复制代码

-------------------------------------------------------------------------------------------------------------------------------------
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 | 显示全部楼层
  1. #include <iostream>
  2. #include <initializer_list>
  3. template <typename tp>
  4. class carray
  5. {
  6. private:
  7.         tp *ARRAY;
  8.         size_t LENGTH;
  9. public:
  10.         /*********************************************************************/
  11.         carray(): ARRAY(nullptr), LENGTH(0) {} //默认构造
  12.         /*********************************************************************/
  13.         carray(std::initializer_list<tp> list): LENGTH(list.size()) //普通构造
  14.         {
  15.                 ARRAY = new tp[LENGTH];
  16.                 for(size_t i = 0; i < LENGTH; i++)
  17.                 {
  18.                         ARRAY[i] = *(list.begin() + i);
  19.                 }
  20.         }
  21.         /*********************************************************************/
  22.         carray(carray<tp> &arr) //复制构造
  23.         {
  24.                 LENGTH = arr.LENGTH;
  25.                 ARRAY = new tp[LENGTH];
  26.                 for(size_t i = 0; i < LENGTH; i++)
  27.                 {
  28.                         *(ARRAY + i) = arr[i];
  29.                 }
  30.         }
  31.         /*********************************************************************/
  32.         void pushback(tp data)
  33.         {
  34.                 tp *t_ARRAY = new tp[LENGTH + 1];
  35.                 for(size_t i = 0; i < LENGTH; i++)
  36.                 {
  37.                         t_ARRAY[i] = ARRAY[i];
  38.                 }
  39.                 t_ARRAY[LENGTH] = data;
  40.                 LENGTH += 1;
  41.                 delete[] ARRAY;
  42.                 ARRAY = t_ARRAY;
  43.         }
  44.         /*********************************************************************/
  45.         size_t size()
  46.         {
  47.                 return LENGTH;
  48.         }
  49.         /*********************************************************************/
  50.         tp operator[](const size_t i) //重载索引下标符号[]
  51.         {
  52.                 return ARRAY[i];
  53.         }
  54.         /*********************************************************************/
  55.         friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
  56.         {
  57.                 for(size_t i = 0; i < arr.size(); i++)
  58.                 {
  59.                         os << arr[i];
  60.                 }
  61.                 return os;
  62.         }
  63.         /*********************************************************************/
  64.         ~carray()
  65.         {
  66.                 delete[] ARRAY;
  67.         }
  68. };
  69. int main(int argc, char const *argv[])
  70. {
  71.         carray<int> arr = {0};
  72.         std::cout << arr << " " << arr.size() << std::endl;
  73.         arr.pushback(999);
  74.         std::cout << arr << " " << arr.size() << std::endl;
  75.         carray<int> t_arr = arr;
  76.         std::cout << t_arr << " " << t_arr.size() << std::endl;

  77.         arr.pushback(123);
  78.         arr.pushback(456);
  79.         arr.pushback(789);
  80.         std::cout << arr[0] << std::endl;
  81.         arr[1] = 100;
  82.         return 0;
  83. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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
图片眼都花了.
我还没写这个方法呢

  1. tp operator[](const size_t i) //重载索引下标符号[]
  2. {
  3.         return ARRAY[i];
  4. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> 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
单个元素赋值我还没写呢
  1. #include <iostream>
  2. #include <initializer_list>
  3. template <typename tp>
  4. class carray
  5. {
  6. private:
  7.         tp *ARRAY;
  8.         size_t LENGTH;
  9. public:
  10.         /*********************************************************************/
  11.         carray(): ARRAY(nullptr), LENGTH(0) {} //默认构造
  12.         /*********************************************************************/
  13.         carray(std::initializer_list<tp> list): LENGTH(list.size()) //普通构造
  14.         {
  15.                 ARRAY = new tp[LENGTH];
  16.                 for(size_t i = 0; i < LENGTH; i++)
  17.                 {
  18.                         ARRAY[i] = *(list.begin() + i);
  19.                 }
  20.         }
  21.         /*********************************************************************/
  22.         carray(carray<tp> &arr) //复制构造
  23.         {
  24.                 LENGTH = arr.LENGTH;
  25.                 ARRAY = new tp[LENGTH];
  26.                 for(size_t i = 0; i < LENGTH; i++)
  27.                 {
  28.                         *(ARRAY + i) = arr[i];
  29.                 }
  30.         }
  31.         /*********************************************************************/
  32.         void pushback(tp data)
  33.         {
  34.                 tp *t_ARRAY = new tp[LENGTH + 1];
  35.                 for(size_t i = 0; i < LENGTH; i++)
  36.                 {
  37.                         t_ARRAY[i] = ARRAY[i];
  38.                 }
  39.                 t_ARRAY[LENGTH] = data;
  40.                 LENGTH += 1;
  41.                 delete[] ARRAY;
  42.                 ARRAY = t_ARRAY;
  43.         }
  44.         /*********************************************************************/
  45.         size_t size()
  46.         {
  47.                 return LENGTH;
  48.         }
  49.         /*********************************************************************/
  50.         tp &operator[](const size_t i) //重载索引下标符号[]
  51.         {
  52.                 return ARRAY[i];
  53.         }
  54.         /*********************************************************************/
  55.         friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
  56.         {
  57.                 for(size_t i = 0; i < arr.size(); i++)
  58.                 {
  59.                         os << arr[i];
  60.                 }
  61.                 return os;
  62.         }
  63.         /*********************************************************************/
  64.         ~carray()
  65.         {
  66.                 delete[] ARRAY;
  67.         }
  68. };
  69. int main(int argc, char const *argv[])
  70. {
  71.         carray<int> arr = {0};
  72.         std::cout << arr << " " << arr.size() << std::endl;
  73.         arr.pushback(999);
  74.         std::cout << arr << " " << arr.size() << std::endl;
  75.         carray<int> t_arr = arr;
  76.         std::cout << t_arr << " " << t_arr.size() << std::endl;

  77.         arr.pushback(123);
  78.         arr.pushback(456);
  79.         arr.pushback(789);
  80.         std::cout << arr[0] << std::endl;
  81.         arr[1] = 100;
  82.         return 0;
  83. }
复制代码


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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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


试一下这个代码
^_^

  1. #include <iostream>
  2. #include <initializer_list>
  3. template <typename tp>
  4. class carray
  5. {
  6. private:
  7.         tp *ARRAY;
  8.         size_t LENGTH;
  9. public:
  10.         /*********************************************************************/
  11.         carray(): ARRAY(nullptr), LENGTH(0) {} //默认构造
  12.         /*********************************************************************/
  13.         carray(std::initializer_list<tp> list): LENGTH(list.size()) //普通构造
  14.         {
  15.                 ARRAY = new tp[LENGTH];
  16.                 for(size_t i = 0; i < LENGTH; i++)
  17.                 {
  18.                         ARRAY[i] = *(list.begin() + i);
  19.                 }
  20.         }
  21.         /*********************************************************************/
  22.         carray(carray<tp> &arr) //复制构造
  23.         {
  24.                 LENGTH = arr.LENGTH;
  25.                 ARRAY = new tp[LENGTH];
  26.                 for(size_t i = 0; i < LENGTH; i++)
  27.                 {
  28.                         *(ARRAY + i) = arr[i];
  29.                 }
  30.         }
  31.         /*********************************************************************/
  32.         void pushback(tp data)
  33.         {
  34.                 tp *t_ARRAY = new tp[LENGTH + 1];
  35.                 for(size_t i = 0; i < LENGTH; i++)
  36.                 {
  37.                         t_ARRAY[i] = ARRAY[i];
  38.                 }
  39.                 t_ARRAY[LENGTH] = data;
  40.                 LENGTH += 1;
  41.                 delete[] ARRAY;
  42.                 ARRAY = t_ARRAY;
  43.         }
  44.         /*********************************************************************/
  45.         size_t size()
  46.         {
  47.                 return LENGTH;
  48.         }
  49.         /*********************************************************************/
  50.         tp &operator[](const size_t i) //重载索引下标符号[]
  51.         {
  52.                 return ARRAY[i];
  53.         }
  54.         /*********************************************************************/
  55.         friend std::ostream &operator<<(std::ostream &os, carray &arr) //重载输出流符号<<
  56.         {
  57.                 for(size_t i = 0; i < arr.size(); i++)
  58.                 {
  59.                         os << arr[i];
  60.                 }
  61.                 return os;
  62.         }
  63.         /*********************************************************************/
  64.         ~carray()
  65.         {
  66.                 delete[] ARRAY;
  67.         }
  68. };
  69. int main(int argc, char const *argv[])
  70. {
  71.         carray<int> arr = {0};
  72.         std::cout << arr << " " << arr.size() << std::endl;
  73.         arr.pushback(999);
  74.         std::cout << arr << " " << arr.size() << std::endl;
  75.         carray<int> t_arr = arr;
  76.         std::cout << t_arr << " " << t_arr.size() << std::endl;

  77.         arr.pushback(123);
  78.         arr.pushback(456);
  79.         arr.pushback(789);
  80.         std::cout << arr[0] << std::endl;
  81.         arr[1] = 100;
  82.         return 0;
  83. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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, 2024-4-25 12:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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