C语言面向对象

创作人QQ:851301776,邮箱:[email protected], 欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点!

个人座右铭:
1.没有横空出世,只要厚积一定发。
2.你可以学历不高,你可以不上学,但你不能不学习

一、核心点

        做C语言和C++的都知道,C语言面向过程,C++面向对象。所以C语言要实现面向对象,核心组成是:  C语言面向对象_第1张图片

        (1)属性:单个物体的基本特性

        (2)方法:单个物体操作类的

        举例:以一个员工为例,员工的姓名、年龄、籍贯、工资、职位等为属性。而为了增加一个员工,新增一些年龄修改或者获取等信息的为方法。

        核心:方法是用来对属性进行操作的函数,而属性是一个对象的基本信息

二、面向对象概念

        把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。

三、属性和方法封装(以学生对象)

1.属性

struct student {
	const void *_;  //
	
	int age;
	char name[NAME_LENGTH];
};

  2.方法

struct func {

	size_t size;
	void* (*ctor)(void *self, va_list *params);
	void* (*dtor)(void *self);
	

	void (*set_age)(int age);
	int (*get_age)(void);

	void (*set_name)(char *name);
	char (*get_name)(void);
	
};

3.抽象

        抽象结构体主要是为了衔接属性和方法的

struct AbstractClass {
	size_t size;
	void* (*ctor)(void *self, va_list *params);
	void* (*dtor)(void *self);
};

四、分配和释放

1.分配步骤如下

(1)传递参数为AbstractClass。

(2)分配AbstractClass中的size大小内存,而size是属性结构体的大小。

(3)把属性中的void *_指向AbstractClass。

(4)使用指针遍历栈区的参数列表(va_list)

2.释放步骤

(1)判断参数是否为空和对应的释放函数

五、方法中的函数实现

(1)方法函数实现

(2)对应结构体

六、参数个数未知(即参数个数可变)时获取函数中的参数

1.头文件

        stdarg.h

2.变量va_list

        这是一个适用于 va_start()、va_arg()va_end() 这三个宏存储信息的类型。

3.宏void va_start(va_list ap, last_arg)
 

        这个宏初始化 ap 变量,它与 va_argva_end 宏是一起使用的。last_arg 是最后一个传递给函数的已知的固定参数,即省略号之前的参数。

4.宏void va_arg(va_list ap, type)

        这个宏检索函数参数列表中类型为 type 的下一个参数

5.宏void va_end(va_list ap)

        这个宏允许使用了 va_start 宏的带有可变参数的函数返回。如果在从函数返回之前没有调用 va_end,则结果为未定义。

七、掩码

        不上

你可能感兴趣的:(Linux,面向对象,方法,属性,读取未知参数)