这篇文章给大家介绍C++ 中怎么实现数组类泛型编程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
原创:
C++ 简单实现数组类泛型编程示例
1、使用模板来实现泛型编程
2、本数组应该能够存储各种基础类型,各种复杂的类类型
3、应该实现部分操作符重载
其实操作符重载满满的都是套路。
代码如下:
点击(此处)折叠或打开
模板类实现:
#include<iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
template <typename T>
class myarray
{
private:
T* array;
unsigned int lenth;
public:
myarray();
myarray(unsigned int len);
myarray(const myarray& a);
myarray& operator=(const myarray& b);
T& operator[](int ind);
~myarray();
};
template <typename T>
myarray<T>::~myarray()
{
if(this->array != NULL)
{
delete [] this->array;
this->array = NULL;
}
}
template <typename T>
myarray<T>::myarray()
{
this->array = NULL;
this->lenth = 0;
}
template <typename T>
myarray<T>::myarray(unsigned int len)
{
this->array = new T[len];
this->lenth = len;
memset(this->array,0,sizeof(T)*len);
}
template <typename T>
myarray<T>::myarray(const myarray<T>& a)
{
int i;
this->lenth = a.lenth;
this->array = new T[a.lenth];
memset(this->array,0,sizeof(T)*a.lenth);
for(i=0;i<a.lenth;i++)
{
*(this->array+i) = *(a.array+i);
}
}
template <typename T>
myarray<T>& myarray<T>::operator=(const myarray<T>& a)
{
if(this->array != NULL)
{
delete [] this->array;//调用类的析构函数不能用free
this->array = NULL;
}
this->array = new T[a.lenth];
this->lenth = a.lenth;
for(int i=0;i<a.lenth;i++)
{
*(this->array+i) = *(a.array+i);//元素对象复制调用对象的=操作符重载
}
return *this;
}
template <typename T>
T& myarray<T>::operator[](int ind)
{
if(ind>=this->lenth)
{
exit(10);
}
return *(this->array+ind);
}
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include"arra.cpp"
using namespace std;
class test
{
private:
int a;
int b;
char* myc;
public:
test()
{
a = 0;
b = 0;
myc = NULL;
}
test(const test& a)
{
this->a = a.a;
this->b = a.b;
this->myc = (char*)calloc(strlen(a.myc)+1,0);
strcpy(this->myc,a.myc);
}
friend ostream& operator<<(ostream& out,test& a)
{
out<<a.a<<endl;
out<<a.b<<endl;
cout<<a.myc;
return out;
}
~test()
{
if(myc != NULL)
{
free(myc);
myc = NULL;
}
}
test& operator=(const test& a)
{
if(this->myc != NULL)
{
free(this->myc);
this->myc = NULL;
}
this->a = a.a;
this->b = a.b;
this->myc = (char*)calloc(strlen(a.myc)+1,0);
strcpy(this->myc,a.myc);
return *this;
}
test& operator=(const char* a)
{
if(this->myc != NULL)
{
free(this->myc);
this->myc = NULL;
}
if(a == NULL)
{
this->myc = (char*)calloc(1,0);
return *this;
}
this->myc = (char*)calloc(strlen(a)+1,0);
strcpy(this->myc,a);
return *this;
}
};
int main()
{
myarray<test> a(3); //测试class类数组
a[0] = "asdasd";
a[1] = "test";
a[2] = "kkkk";
myarray<int> b(3); //测试int数组
b[0] = 1;
b[1] = 2;
b[2] = 3;
myarray<char> c(3); //测试char数组
c[0] = 'a';
c[1] = 'b';
c[2] = 'c';
myarray<test> d = a;//测试myarray拷贝构造函数
for(int i=0;i<3;i++)
{
cout<<a[i]<<endl;
cout<<d[i]<<endl;
}
for(int i=0;i<3;i++)
{
cout<<b[i]<<endl;
}
for(int i=0;i<3;i++)
{
cout<<c[i]<<endl;
}
}
关于C++ 中怎么实现数组类泛型编程就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:http://blog.itpub.net/7728585/viewspace-2136044/