c语言如何实现数组,C中如何实现泛化数组

用链表做了就不是数组了。

我首先想到的是C++中的vector,以前见过有人用C写面向对象风格的代码,记得不是很清楚,根据自己的理解我写了下面的一种实现方法:

[CODE]

#include

#include

#include

//=============================Starting to define my Array class=========================

//-----------------------------Declaration segment-------------------------

typedef int DataType;

typedef struct array{

DataType *Data;

int size,max_size;

void (*Input)(DataType , struct array *);

void (*Constructor)(struct array *);

void (*Destructor)(struct array *);

}Array;

void Init(Array *this);

void _constructor(Array *this);

void _denstructor(Array *this);

void _input(DataType data, Array *this);

//------------------------------Implemen segment---------------------------

void _input(DataType data, Array *this)

{

int i;

DataType *ptr;

if(this->size >= this->max_size)

{

this->max_size +=10;

ptr=(DataType *)malloc(this->max_size*sizeof(DataType));

for(i=0;isize;i++)

ptr[i]=this->Data[i];

free(this->Data);

this->Data=ptr;

}

this->Data[this->size]=data;

++(this->size);

}

void _constructor(Array *this)

{

this->size=0;

this->max_size=10;

this->Data=(DataType *)malloc(this->max_size*sizeof(DataType));

}

void _denstructor(Array *this)

{

free(this->Data);

}

void Init(Array *this)

{

this->Input =_input;

this->Constructor =_constructor;

this->Destructor =_denstructor;

this->Constructor(this);

}

//===================================definition end===============================

// 使用示例

int main()

{

Array MyArray;

Init(&MyArray); //使用对象前必须初始化,间接调用构造函数

MyArray.Input(1,&MyArray);

MyArray.Input(2,&MyArray);

printf("The elements of MyArray : %d,\t%d",MyArray.Data[0],MyArray.Data[1]);

getch();

MyArray.Destructor(&MyArray); //使用对象后必须显式调用析构函数

return 0;

}

[/CODE]

可惜C不支持template,不能做成模板;函数不能隐式传递this指针,不得不显示加入this;不支持运算符重载,不能使用[]直接访问元素;否则可以写出更加优雅的代码。

如果大家可以用C写出更加OO的code欢迎跟贴讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值