C语言实现面向对象思想编程

  • 浅谈面向对象

很多学C的人相信都有一个疑惑C语言是面向过程编程的,怎么可以做面向对象?
但是C语言也是最底层的语言所以也可以通过一些结构体与指针来完成面向对象的开发,其实,面向对象是一种编程的思想,与你使用的语言没有太大的关系,其实,大部分的编程语言都可以实现面向对象编程。但是面向对象的语言中实现封装等操作被封装在语言中,这使得面向对象开发变得更加方便。

  • 面向对象思想概述

面向对象编程(oop)最基本的三个特点就是:封装、继承、多态

封装:将字段制作为私有化,对外暴露便捷的公共方法供外界访问类中的成员。
继承:提升代码重复使用,降低代码重复率,表现出一种层次关系(体系)
多态:把子类对象赋值给父类类型变量,编译时以父类类型的标准编译,编译时可以屏蔽子类之间的实现差异,从而做到通用编程,代码复用功能。

  • 编程示例

    • 封装

    #include "stdio.h"
    
    typedef struct
    {
    	int x;
    	int y;
    }var1;
    
    void num_init(var1 *const var,int init_num)
    {
    	var->x = init_num;
    	var->y = init_num;
    }
    
    void num_add(var1 *const var,int a)
    {
    	var->x = var->x + a;
    }
    
    void num_sub(var1 *const var,int b)
    {
    	var->y = var->y - b;
    }
    
    int get_x(var1 *const var)
    {
    	return var->x;
    }
    
    int get_y(var1 *const var)
    {
    	return var->y;
    }
    
    //主函数在另一个.c文件中
    void main() 
    {
    	var1 var2,var3;
    	num_init(&var2,15);
    	num_init(&var3,20);
    	printf("var2\tx = %d\ty = %d\n",get_x(&var2),get_y(&var2));
    	printf("var3\tx = %d\ty = %d\n\n",get_x(&var3),get_y(&var3));
    
    	num_add(&var2,5);
    
    	printf("var2\tx = %d\ty = %d\n",get_x(&var2),get_y(&var2));
    	printf("var3\tx = %d\ty = %d\n\n",get_x(&var3),get_y(&var3));
    
    	num_sub(&var3,5);
    
    	printf("var2\tx = %d\ty = %d\n",get_x(&var2),get_y(&var2));
    	printf("var3\tx = %d\ty = %d\n\n",get_x(&var3),get_y(&var3));
    }
    /*****************************************************************
    * 运行结果:
    * var2	x = 15	y = 15
    * var3	x = 20	y = 20
    * 
    * var2	x = 20	y = 15
    * var3	x = 20	y = 20
    * 
    * var2	x = 20	y = 15
    * var3	x = 20	y = 15
    ******************************************************************/
运行结果

在这里插入图片描述

  • 继承

    /******************第二个类**********************/
    typedef struct
    {
    	var1 var;
    	int row;
    	int line;
    }calc;
    
    //构造函数
    void structure_function(calc * const myclac,int x,int y,int row,int line)
    {
    	num_init(&myclac->var,x);
    	myclac->line = line;
    	myclac->row = row;
    }
    
    //假如主函数在另一个.c文件中
    void main() 
    {
    	calc c1,c2;
    	//实例化对象
    	structure_function(&c1,1,2,3,4);
    	structure_function(&c2,5,6,7,8);
    	
    	printf("c1\tx = %d\ty = %d\n",get_x(&c1.var),get_y(&c1.var));
    	printf("c2\tx = %d\ty = %d\n\n",get_x(&c2.var),get_y(&c2.var));
    }
运行结果

在这里插入图片描述

  • 方法定义

主函数(使用部分)

#include "include.h"

int main()
{
	dev.init(2);
	dev.ins(50);
	dev.print();
	printf("%d", dev.a);
	return 0;
}

头文件及其相应源文件内容

#ifndef __INCLUDE_H_
#define __INCLUDE_H_
#include <stdio.h>
struct _m_usmart_dev
{
	int a;
	void (*init)(int);				//初始化
	int (*ins)(int);			//识别函数名及参数
	void (*print)();
};


void init(int sum);
int insert(int num);
void print();

extern struct _m_usmart_dev dev;

#endif // !__INCLUDE_H_
#include "include.h"
void init(int sum)
{
	dev.a = sum;
}
int insert(int num)
{
	dev.a = num;
	return 1;
}
void print()
{
	printf("%d\n", dev.a);
}
struct _m_usmart_dev dev =
{
	0,
	init,
	insert,
	print,
};
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值