1. 使用struct来保存数据
2. 使用struct里面的函数指针指向相应的函数
#include <stdlib.h> #include <stdio.h> // 不完整的声明,方便后面函数指针类型变量的定义 struct Person; typedef struct Person *PPerson; typedef void (*setAge)(PPerson person, int age); typedef int (*getAge)(PPerson person); /** * 结构体,包含普通的变量(数据)和函数指针(行为) **/ struct Person { int age; setAge setAgeFunc; getAge getAgeFunc; }; void setAgeFuncImpl(PPerson person, int age) { person->age = age; } int getAgeFuncImpl(PPerson person) { return person->age; } int main() { PPerson person = malloc(sizeof(struct Person)); person->setAgeFunc = setAgeFuncImpl; person->getAgeFunc = getAgeFuncImpl; person->setAgeFunc(person, 20); printf("age: %d\n",person->getAgeFunc(person)); free(person); return 0; }
实现过程: 相应的函数的定义, 要接收结构体的地址, 方便struct的数据的操作.
从而实现了函数只操作自己的数据,不会操作其他对象的数据.
问题: 现在是"自己调用一个操作自己的函数,同时却需要传递自己的指针给函数", 能否
根据自己调用了一个函数, 同时隐含将自己的数据地址的指针传递给函数. 如果自己来实现
就是函数操作,预先将数据地址传递到一个地方(例如寄存器), 函数执行时, 从指定的地方(例如寄存器)
读取数据地址, 之后操作数据.
#include <stdlib.h> #include <stdio.h> // 不完整的声明,方便后面函数指针类型变量的定义 struct Person; typedef struct Person *PPerson; typedef void (*setAge)(int age); typedef int (*getAge)(); /** * 结构体,包含普通的变量(数据)和函数指针(行为) **/ struct Person { int age; setAge setAgeFunc; getAge getAgeFunc; }; void setAgeFuncImpl(int age) { PPerson person; _asm mov person, edx; person->age = age; } int getAgeFuncImpl() { PPerson person; _asm mov person, edx; return person->age; } int main() { PPerson person = malloc(sizeof(struct Person)); person->setAgeFunc = setAgeFuncImpl; person->getAgeFunc = getAgeFuncImpl; _asm mov edx, person; person->setAgeFunc(20); _asm mov edx, person; printf("age: %d\n",person->getAgeFunc()); free(person); return 0; }
可以看上,上述传递对象的地址,获取对象的地址,都是机械的重复. 如果能够让编译器知道调用一个方法
前,需要传递一个指针, 方法之后,知道应该获取一个指针, 就不用重复这些步骤了.
这个就是c++中class, c++编译器就会干这些事情, 类其实也就是一个stuct啊, 呵呵.
相关推荐
使用C、C++、Java实现面向对象demo,对面向对象的学习有较深刻的理解
c语言是一个面向过程的语言,但是也可以实现c++的面向对象的思想。 这个资源可以理解多态的虚表虚指针。 在嵌入式研发中会使用面向对象的思想。 适用于c语言研发工程师。
课程内容有:面向对象的基本概念和要素,包括类、对象、类的特性、消息传递等;C语言基础,包括变量、类型、数组、指针、结构、控制语句、程序结构等;C++对C的改进部分,包括注释,作用域运算符,宏定义等;类,...
大致实现了STL中的链表的基本功能,通过对比C语言实现线性表的链式存储可以更好的理解面向对象编程和面向过程的区别,更加深入的理解C语言和C++语言的区别。相关的文章可以在我的主页算法与数据结构专栏查看。
实现面向对象,不是C语言擅长的,用C实现面向对象,多少会显的晦涩和力不从心,不过从中,也许可以加深对C++的理解
一、C语言是面向过程语言,而C++是面向对象语言 我们都知道C语言是面向过程语言,而C++是面向对象语言,说C语言和C++的区别和联系,也就是在比较面向过程和面向对象的区别。 1、面向过程和面向对象的区别 面向过程...
与当前某些面向对象语言不同,C语言为创建可重用应用程 序接口(Application Programming Interface,API)提供的语言和功能支持非常少。尽管大多 数C语言程序员在自己所编写的每一个应用程序中都使用API和实现API的库...
从一 个具体的例子着手,针对VS.NET集成的C++编译器的编译结果,对其进行反汇编,从而揭示出代码后面编译器所作的许多工作,以使读者对类的构造、存 储、数据成员与成员函数之间的联系等有一个较为深入的理解。
这是我大一上学期刚学完C语言后,开始学习C++,开始接触面向对象编程这一概念。 在学习C++过程中,加深了我对编程的理解,比如python为什么很多方法可以对不同的数据类型进行操作,同时模板类,泛型编程帮助我可以...
大致实现了STL中的线性表基本功能,通过对比C语言实现线性表的顺序存储可以更好的理解面向对象编程和面向过程的区别,更加深入的理解C语言和C++语言的区别。相关的文章可以在我的主页算法与数据结构专栏查看。
理解面向对象程序设计的基本原理,包括类、对象、抽象、封装、继承和多态性等关键要素以及其关键语法特性—类;掌握用C++编写面向对象程序的一般方法;了解VC++编程环境。通过上机实验进一步加深对课程基本内容的...
2.2 一个袖珍C库 23 2.3 放在一起:项目创建工具 29 2.4 什么是非正常 29 2.5 基本对象 30 2.6 什么是对象 34 2.7 抽象数据类型 35 2.8 对象细节 35 2.9 头文件形式 36 2.10 嵌套结构 37 2.11 小结 41 2.12 练习 41 ...
C++是一种优秀的面向对象程序设计语言。它从C语言的基础上发展而来,但又比C语言更容易学习和掌握。C++以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。C++完美地体现了面向对象的各种特性。通过本章...
人事管理系统,c++类的集中体现,便于学习和深化对c++的理解与运用。课程设计系统。
而面向对象的语言,如c++,Modula-3,则鼓励将接口与实现分离,基于接口的设计独立与任何特定 的语言,但是它要求程序员对像c一样的语言有更多的驾驭能力和更高的警惕性,因为这类语言很容易破坏带有隐含实现信息的...
*1.1 从C到C++ *1.2 最简单的C++程序 1.3 C++程序的构成和书写形式 1.4 C++程序的编写和实现 1.5 关于C++上机实践 习题 第2章 数据类型与表达式 2.1 C++的数据类型 2.2 常量 2.2.1 什么是常量 2.2.2 ...
面向对象实现 C.C++编程 D.文档收集 参考答案:B 您的答案:B 13、面向对象分析的主要目的就是开发人员在有用户参与协作下,明确用户需求,应用 标准化的面向对象模型规范地表述需求,最后形成面向对象的( )...
通过课程设计2加深对《C++面向对象程序设计》课程所学知识的理解,熟练掌握和巩固C++语言的基本知识和语法规范,掌握C++语言的基础知识,理解面向对象系统的封装性、继承性和多态性:熟练使用C语言中的函数、数组、...
因为C++并不是一个有严格意义的面向对象的语言,它有过程和对象的共同特点,既可以当作C语言来实现面向过程,也可以像JAVA那样封装各种类来实现特点功能的面向对象编程。 简单介绍了一下JAVA的类,主要对有C/C++基础...
Eckel有20年专业编程经验,并自1986年起教育人们如何撰写面向对象程序,足迹遍及全球,成为一位知名的 C++教师和顾问,如今兼涉Java。他是C++标准委员会拥有表决权的成员之一,曾经写过另五本面向对象编程书籍,发表...