c语言char 实例化,【面向对象】用C语言实现面向对象思想探讨。。。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

string.class.c:

#include "string.class.h"

#include

#include

#include

static STR* this = NULL;

static int length()

{

return strlen(this->string);

}

static char* subIndex(int index)

{

return (this->string+index);

}

static char* subString(const char* str)

{

return strstr(this->string,str);

}

static int indexOf(const char* str)

{

const char* p = strstr(this->string,str);

if(!p) return -1;

return p-this->string;

}

static char* join(const char* str)

{

int tz = strlen(this->string);

char* temp = (char*)malloc(tz+1);

memset(temp,0,tz);

strcpy(temp,this->string);

this->string = (char*)realloc(this->string,tz+strlen(str)+1);

memset(this->string,0,tz+strlen(str)+1);

sprintf(this->string,"%s%s",temp,str);

free(temp);

return this->string;

}

static void set(const char* str)

{

char* temp = (char*)malloc(strlen(str)+1);

memset(temp,0,strlen(str)+1);

strcpy(temp,str);

this->string = (char*)realloc(this->string,strlen(str)+1);

memset(this->string,0,strlen(str)+1);

strcpy(this->string,temp);

free(temp);

}

static void del()

{

if(this->string){

free(this->string);

this->string = NULL;

}

}

static int toInt()

{

return strtol(this->string,NULL,0);

}

static int cmp(const char* str)

{

if(strcmp(this->string,str)) return 0;

return 1;

}

static void upper()

{

char* p = this->string;

while(*p){

if(*p>='a' && *p<='z'){

*p = *p - ('a' - 'A');

}

++p;

}

p = NULL;

}

static void lower()

{

char* p = this->string;

while(*p){

if(*p>='A' && *p<='Z'){

*p = *p + ('a' - 'A');

}

++p;

}

p = NULL;

}

static float toFloat()

{

return strtof(this->string,NULL);

}

STR* new_string(const char* str)

{

this = (STR*)malloc(sizeof(STR));

memset(this,0,sizeof(STR));

this->length = length;

this->subIndex = subIndex;

this->subString = subString;

this->indexOf = indexOf;

this->join = join;

this->set = set;

this->del = del;

this->toInt = toInt;

this->cmp = cmp;

this->upper = upper;

this->lower = lower;

this->toFloat = toFloat;

this->string = (char*)malloc(strlen(str)+1);

memset(this->string,0,strlen(str)+1);

strcpy(this->string,str);

return this;

}

void delete_string(STR** obj)

{

del();

if(this){

free(this);

this = NULL;

}

*obj = NULL;

}

当然C语言是极其灵活的,我为了方便理解,故意写成了类似C++的类,也是可以不这么写的。。。就连这个维护这个“类”的指针,我也写成了this,C语言中是没有this这个关键字的。。。

,,,

此外还有继承、多态,其实C语言中的printf函数就已经具有部分的多态特性了,printf就一个函数,依据输入的不同,也完成了不同的功能,我本来还想讨论一下C语言中的可变参数函数写法,时间有限,大家可以搜索 stdarg.h 这个头文件,是C语言专门处理可变参数的,

继承其实也很容易实现,有函数指针,很容易把其他结构体中的“方法”地址,复制过来,达到代码重用和降低耦合度的目的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值