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>
----------------------------------------------------------------------------------------------------------
第82行报错了
^_^
#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:32 编辑
人造人 发表于 2019-11-19 00:24
@小甲鱼
这图片就不能弄高清一点吗?都快看不清字了
^_^
图片眼都花了.
我还没写这个方法呢{:10_256:} bin554385863 发表于 2019-11-19 00:30
眼都花了
代码已经附上,82行报错,这是你想要的结果吗?
^_^ bin554385863 发表于 2019-11-19 00:30
图片眼都花了.
我还没写这个方法呢
tp operator[](const size_t i) //重载索引下标符号[]
{
return ARRAY;
}
{:10_256:} 人造人 发表于 2019-11-19 00:32
代码已经附上,82行报错,这是你想要的结果吗?
^_^
单个元素赋值我还没写呢{:10_266:} 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;
}
^_^
tp &operator[](const size_t i) //重载索引下标符号[]
{
return ARRAY;
} 人造人 发表于 2019-11-19 00:36
....我想想咋写 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:58 编辑
人造人 发表于 2019-11-19 00:45
试一下这个代码
^_^
这个可以的,
换成引用就行了.......
MMP,我怕是糊涂了,引用可以像指针一样修改变量的值 bin554385863 发表于 2019-11-19 00:56
这个可以的,
换成引用就行了.......
MMP,我怕是糊涂了,引用可以像指针一样修改变量的值
^_^ 本帖最后由 bin554385863 于 2019-11-19 10:48 编辑
人造人 发表于 2019-11-19 00:59
^_^
{:5_109:}
谢谢
写着个就是为了检验一下类学的咋样
构造
析构
运算符重载
new, delete运算符
还有剩下的类的静态成员
页:
[1]