栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言面向对象编程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言面向对象编程

C语言面向对象编程

面向对象的编程支持封装、继承和多态三种特性,通过这三种特性,来理解什么是面向对象。

封装:

通过采用封装特性,把一组相关联的函数和数据圈起来,使圈外面的代码只能看见部分函数,数据则完全不可见。在.h文件中定义数据结构以及函数,在程序文件中实现。本例中数据结构在.h文件中定义。

typedef struct
{
	double x;
	double y;
}ST_POINT_T;

extern	ST_POINT_T*	creatPoint(double x, double y);
extern	double distance(ST_POINT_T* p1, ST_POINT_T* p2);
ST_POINT_T*	creatPoint(double x, double y)
{
	ST_POINT_T* p = (ST_POINT_T *)malloc(sizeof(ST_POINT_T));
	if (p != NULL)
	{
		p->x = x;
		p->y = y;
		return p;
	}
}

double distance(ST_POINT_T* p1, ST_POINT_T* p2)
{
	double dx = p1->x - p2->x;
	double dy = p1->y - p2->y;
	return sqrt(dx * dx + dy * dy);
}
继承:
typedef struct
{
	double x;
	double y;
	char* name;
}ST_NAMEPOINT_T;

extern	ST_NAMEPOINT_T*	creatNamePoint(double x, double y, char* name);
ST_NAMEPOINT_T*	creatNamePoint(double x, double y, char* name)
{
	ST_NAMEPOINT_T* p = (ST_POINT_T *)malloc(sizeof(ST_NAMEPOINT_T));
	if (p != NULL)
	{
		p->x = x;
		p->y = y;
		p->name = name;
		return p;
	}
}
void main()
{
	ST_NAMEPOINT_T* point1 = (ST_NAMEPOINT_T *)malloc(sizeof(ST_NAMEPOINT_T));
	ST_NAMEPOINT_T* point2 = (ST_NAMEPOINT_T *)malloc(sizeof(ST_NAMEPOINT_T));
	double dis;
	point1 = creatNamePoint(1, 2, "leftpoint");
	point2 = creatNamePoint(1, 3, "rightpoint");
	dis = distance((ST_POINT_T*)point1, (ST_POINT_T*)point2);
	printf("distance is %f", dis);
}

ST_NAMEPOINT_T数据结构被当做是ST_POINT_T数据结构的衍生体,两者前两个成员的顺序一样。看上去投机取巧,在面向对象理论提出之前,这已经很常见了。

多态:
void copy()
{
	int c;
	while ((c = getchar()) != EOF)
	{
		putchar(c);
	}
}

在这个程序中,getchar主要负责从STDIN中读取数据,putchar将数据写入STDOUT,但是STDIN和STDOUT具体指代哪个设备呢,是不确定的。这类函数就具有多态性,依赖于STDIN和STDOUT的具体类型。

struct FILE
{
	void	(*open)(char * name, int mode);
	void	(*close)();
	int		(*read)();
	void	(*write)(char);
	void	(*seed)(long index, int mode);
};

struct FILE* STDIN;

int getchar()
{
	return	STDIN->read();
}

getchar()只是调用了STDIN所指向的FILE数据结构体中的read函数指针所指向的函数。归根结底,多态是函数指针的一种应用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312007.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号