当前位置:首页 > 教育培训 >

c语言为何不是面向对象语言(c语言面向过程还是面向对象)

来源:原点资讯(m.360kss.com)时间:2023-06-19 12:07:48作者:YD166手机阅读>>

01. 前言

面向对象编程(OOP)并不是一种特定的语言或者工具,它只是一种设计方法、设计思想。它表现出来的三个最基本的特性就是封装、继承与多态。很多面向对象的编程语言已经包含这三个特性了,例如Smalltalk、C 、Java。但是你也可以用几乎所有的编程语言来实现面向对象编程,例如 ANSI-C。要记住,面向对象是一种思想,一种方法,不要太拘泥于编程语言。

C语言不是面向对象的语言,因此使用C语言完全实现面向对象的编程是不可能。但是使用C语言可以很容易实现基于对象的编程,并且基本实现对象的封装性,部分实现对象的继承。

02. 简单程序示例

C语言实现对象封装的小程序,包含三部分:接口,调用和实现,均使用C语言的基本语法实现。

头文件test.h声明如下

#ifndef __TEST_H__

#define __TEST_H__

#ifdef __cplusplus

//表示是C语言的头文件

extern "C"

{

#endif

typedef void * HPERSON;

//创建对象

HPERSON createPerson(const char *name);

//设置对象

void setPerson(HPERSON person, int age, int id);

//显示对象

void displayPerson(HPERSON person);

//删除对象

void deletePerson(HPERSON person);

#ifdef __cplusplus

}

#endif

#endif /*__TEST_H__*/

test.c文件如下

#define _CRT_SECURE_NO_WARNINGS

#include "test.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define NAMEMAX 32

//Person表示HPERSON句柄指向的结构体

typedef struct _Person {

char name[NAMEMAX];

int age;

int id;

}Person;

//创建对象

HPERSON createPerson(const char * name)

{

Person *p = NULL;

printf("创建对象\n");

if (strlen(name) 1 <= NAMEMAX)

{

p = malloc(sizeof(Person));

if (NULL == p)

{

printf("分配内存失败\n");

return NULL;

}

memset(p, 0, sizeof(Person));

strcpy(p->name, name);

p->age = 0;

p->id = 0;

}

return p;

}

//设置对象

void setPerson(HPERSON person, int age, int id)

{

Person *p = person;

if (NULL != p)

{

p->age = age;

p->id = id;

}

}

//显示对象

void displayPerson(HPERSON person)

{

Person *p = person;

if (NULL == p)

{

printf("displayPerson 参数非法\n");

return;

}

printf("Name: %s age: %d id:%d\n", p->name, p->age, p->id);

}

//删除对象

void deletePerson(HPERSON person)

{

free(person);

}

main.c实现如下

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include "test.h"

int main()

{

HPERSON p = createPerson("LiMing");

setPerson(p, 18, 1);

displayPerson(p);

deletePerson(p);

system("pause");

return 0;

}

测试结果

创建对象

Name: LiMing age: 18 id:1

请按任意键继续. . .

总结

对象的操作一直使用句柄HPERSON,在调用的过程中看不到程序处理的细节,比如对象的建立和释放。接口掩盖了实现的很多细节,在接口中看不到指针的使用,并且不能够也没有必要访问数据结构。

03. 程序示例优化

头文件test.h声明如下

#ifndef __TEST_H__

#define __TEST_H__

#ifdef __cplusplus

//表示是C语言的头文件

extern "C"

{

#endif

typedef void * HPERSON;

//创建对象

HPERSON createPerson(const char *name);

//设置对象

void setPerson(HPERSON person, int age, int id);

//显示对象

void displayPerson(HPERSON person);

//删除对象

void deletePerson(HPERSON person);

#ifdef __cplusplus

}

#endif

#endif /*__TEST_H__*/

test.c文件实现如下

#define _CRT_SECURE_NO_WARNINGS

#include "test.h"

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//Person表示HPERSON句柄指向的结构体

typedef struct _Person

{

//使用指针

char *name;

int age;

int id;

}Person;

//创建对象

HPERSON createPerson(const char * name)

{

Person *p = NULL;

printf("创建对象\n");

p = malloc(sizeof(Person));

if (NULL == p)

{

printf("分配内存失败\n");

return NULL;

}

memset(p, 0, sizeof(Person));

p->name = malloc(strlen(name) 1);

if (NULL == p->name)

{

printf("分配内存失败\n");

return NULL;

}

strcpy(p->name, name);

p->age = 0;

p->id = 0;

return p;

}

//设置对象

void setPerson(HPERSON person, int age, int id)

{

Person *p = person;

if (NULL != p)

{

p->age = age;

p->id = id;

}

}

//显示对象

void displayPerson(HPERSON person)

{

Person *p = person;

if (NULL == p)

{

printf("displayPerson 参数非法\n");

return;

}

printf("Name: %s age: %d id:%d\n", p->name, p->age, p->id);

}

//删除对象

void deletePerson(HPERSON person)

{

Person *p = person;

if (NULL == person)

{

return;

}

if (NULL != p->name)

{

free(p->name);

}

free(person);

}

main.c测试代码

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include "test.h"

int main()

{

HPERSON p = createPerson("LiMing");

setPerson(p, 18, 1);

displayPerson(p);

deletePerson(p);

system("pause");

return 0;

}

测试结果

创建对象

Name: LiMing age: 18 id:1

请按任意键继续. . .

04. 总结

基于对象的C语言编程的流程,程序从接口到实现都是使用C语言实现的。

栏目热文

c语言是面向对象的程序设计语言(c语言不是面向对象程序设计语言)

c语言是面向对象的程序设计语言(c语言不是面向对象程序设计语言)

C语言是一种“古老”且应用至今的高级编程语言,它是多种流行编程语言的根源。C 进一步扩充和完善了C语言,是一种面向对象...

2023-06-19 12:04:30查看全文 >>

c语言是一种高级程序设计语言吗

c语言是一种高级程序设计语言吗

c语言具体是什么?普及下什么是C语言,C语言到底有什么用?先了解了之后我们在谈它的难度问题。C语言是一种计算机程序设计语...

2023-06-19 12:03:44查看全文 >>

c语言是面向对象的语言对吗(c语言是面向对象的设计语言对吗)

c语言是面向对象的语言对吗(c语言是面向对象的设计语言对吗)

1、c语言是面向过程还是面向对象的语言?C语言是一门面向过程的语言。所谓面向过程就是以事件作为我们编程的中心。比如说我要...

2023-06-19 12:04:41查看全文 >>

c是一种面向对象的程序设计语言(面向对象程序设计期末考试题及答案)

c是一种面向对象的程序设计语言(面向对象程序设计期末考试题及答案)

目录01.为什么会选择学习c 02. C与C 的历史03. C 的特点04. c 的缺点05. c 的具体应用...

2023-06-19 12:11:30查看全文 >>

c语言为什么不能作为面向对象语言(c语言是面向对象的程序设计语言)

c语言为什么不能作为面向对象语言(c语言是面向对象的程序设计语言)

1,C语言不是面向对象语言。因为这一点,任何学习C语言的人必须学会用函数思考问题。当你真正的去学习一门面向对象语言时,就...

2023-06-19 12:02:23查看全文 >>

c语言是面向对象的编程语言吗(不支持面向对象的编程语言)

c语言是面向对象的编程语言吗(不支持面向对象的编程语言)

c语言和C 到底是什么关系?首先C 和C语言本来就是两种不同的编程语言,但C 确实是对C语言的扩充和延伸,并且对C...

2023-06-19 12:07:49查看全文 >>

c语言是面向对象的设计语言对吗(c语言是面向对象还是过程的语言吗)

c语言是面向对象的设计语言对吗(c语言是面向对象还是过程的语言吗)

面向对象的三个特征:封装,继承,多态。但是C语言不是面向对象编程语言,所以需要借助一些技巧来实现这三个特征:(1)C语言...

2023-06-19 11:54:12查看全文 >>

c语言支持面向对象的程序设计方法(c语言是面向对象的编程语言)

c语言支持面向对象的程序设计方法(c语言是面向对象的编程语言)

面向对象设计有诸多优势:可读性强,扩展性强,复用性强。面向对象语言有3大核心技术:1、封装性2、继承性3、多态性主流面向...

2023-06-19 12:22:14查看全文 >>

c语言是模块化程序设计语言吗(c语言模块化设计定义)

c语言是模块化程序设计语言吗(c语言模块化设计定义)

《C程序设计》知识点第1章 C语言概述1.1. C语言属高级语言,区分字母的大小写,以函数为基本单位采用模块化程序设计,...

2023-06-19 11:48:40查看全文 >>

韩剧秘密森林结局是什么(韩剧秘密森林在哪里可以看到)

韩剧秘密森林结局是什么(韩剧秘密森林在哪里可以看到)

在现实生活中,确实有一些婚外情人最终找到了自己的幸福,有些甚至能够走到一起结婚,以下是一些婚外情人美好结局的例子。《红楼...

2023-06-19 12:02:13查看全文 >>

文档排行