【C语言】C实现C++类(以String类为例)

【C语言】C实现C++类(以String类为例)

前言浅谈:面向过程的C语言算是比较偏底层的高级语言,而C++、C#、Java、Python等都是面向对象的高级语言,但是C语言却稳坐编程语言排行榜前列,说明C的应用十分广泛和强大,小到输出“HELLO,WOELD!”,点亮单片机的LED等,大到用来进行嵌入式系统开发、编写操作系统和实现其他高级语言。掌握C语言有助于我们学习其他编程语言,甚至可以深入理解如何提高开发的效率。 C++、C#、Java、Python等高级语言创造了多姿多彩、功能强大的软件世界,C语言创造了这些语言!

C语言写一个类,主要注意以下几点: ①类的组成:成员和方法 ②类的特性:封装性、继承性、多态性(当然严格来说不能完全实现C++的特性) ③结构体不能定义函数(在C++中的结构体又能定义函数了),可以用函数指针实现方法 ④结构体的成员默认public属性 ⑤如果要继承,那么两个结构体相同的成员都要定义成一样,新增的成员变量放在后面。定义的顺序很重要,先定义的作为基类。 ⑥“类”的构造函数、析构函数不能放在“类”中,只能放在“类”外

进入例子:C实现C++的一个String类

#include

#include

#include

#define C_class typedef struct

C_class string //class string

{

public:

char *str;

void (*show)(string *This);

} string;

C_class substring //class substring 伪继承了string类

{

public:

char *str;

void (*show)(substring *This);

void (*showsubstrlen)(substring *This);

} substring;

//成员函数的实现

void str_show(string *This)

{

printf("%s\n", This->str);

}

void substr_show(substring *This)

{

printf("%s\n", This->str);

}

void showsubstrlen(substring *This)

{

printf("showsubstrlen:%d\n", strlen(This->str));

}

//伪构造函数

string *newstring( char *s)

{

string *newstr = (string*)malloc(sizeof(string));

char *S = (char*)malloc(strlen(s) + 1);

newstr->str = S;

strcpy(S, s);

newstr->show = str_show;

return newstr;

}

substring *newsubstring( char *s)

{

substring *newstr = (substring*)malloc(sizeof(substring));

char *S = (char*)malloc(strlen(s) + 1);

newstr->str = S;

strcpy(S, s);

newstr->show = substr_show;

newstr->showsubstrlen=showsubstrlen;

return newstr;

}

//伪析构函数

void Deletestring(string *obj) // 3 分

{

free(obj->str);

free(obj);

}

void Deletesubstring(substring *obj) // 3 分

{

free(obj->str);

free(obj);

}

int main()

{

string *sp=newstring("I am string!"); //实例化对象

substring *ssp=newsubstring("I am substring!");

//类指针间接调用成员

sp->show(sp);

ssp->show(ssp);

ssp->showsubstrlen(ssp);

//伪多态

string *a; //引入多态指针

a=sp;

a->show(a);

a=(string *)ssp;

a->show(a);

//伪析构函数释放对象内存

Deletestring(sp);

Deletesubstring(ssp);

return 0;

}

结果:

当然,还有许多方法可以实现C模拟类,这里的实现形式也存在一些不足之处,希望大家共勉!在C语言模拟面向对象虽然没有实用意义,但是最重要的是提高自己的能力、丰富自己的编程思想啦!

相关文章

雄黄酒有多少钱,雄黄酒价格查询
365bet中文版app

雄黄酒有多少钱,雄黄酒价格查询

🕒 06-27 👁️ 7422
廓尔喀刀(★) | 屠夫
365bet中文版app

廓尔喀刀(★) | 屠夫

🕒 06-29 👁️ 5575
上汽通用雪佛兰-科帕奇
谁有365体育投注网站

上汽通用雪佛兰-科帕奇

🕒 06-28 👁️ 3676
手游天龙八部哪个职业厉害(天龙八部手游什么职业最厉害)
谁有365体育投注网站

手游天龙八部哪个职业厉害(天龙八部手游什么职业最厉害)

🕒 06-27 👁️ 1469
华为手机如何关闭正在运行的程序
365bet官网

华为手机如何关闭正在运行的程序

🕒 06-28 👁️ 6537
小米MiSans系列全套字体(共10款) 可免费商用
365bet中文版app

小米MiSans系列全套字体(共10款) 可免费商用

🕒 07-01 👁️ 7722
不良人第八季曝光,两大主角回归,一个伏笔已埋下,开播时间已定
日本《MAQUIA(マキア)》彩妆时尚资讯杂志【2024年·全年订阅】月刊
手机屏幕吸盘使用教程 手机屏幕吸盘使用教程图解