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++是一门强大的编程语言,尤其以其面向对象特性著称。面向对象编程(Object-Oriented Programming, OOP)是一种设计理念,它基于对象、类、继承、封装、多态等核心概念。8年的编程经验使得...
根据给定文件的信息,我们可以总结出以下相关的C++知识点: ### 面向对象程序设计C++课后答案概述 ...这些知识点涵盖了从C++的基本语法到面向对象编程的核心概念,为学习者提供了全面的理解和应用C++的基础。
C++是一种支持面向对象编程(OOP)的强类型、编译型、通用编程语言,由Bjarne Stroustrup在C语言的基础上发展而来,既具有过程性编程的特点,又引入了面向对象的特性。 标题"面向对象技术与C++编程"表明这组课件...
《殷人昆数据结构用面向对象方法与C++语言描述》是数据结构领域一本重要的教材,尤其对于学习C++编程的计算机科学和技术专业的学生来说,它提供了深入理解数据结构和算法的基础。本书的第二版在第一版的基础上进行了...
本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...
总之,从C++转向Java的过程中,理解面向对象编程的概念以及Java与C/C++之间的主要差异至关重要。通过学习Java的运行机制、面向对象的核心特性、文件结构与命名空间管理以及异常处理等知识,开发者可以更好地适应Java...
在《麻省理工免费课程:C语言内存管理和C++面向对象编程》这一课程中,首先对C语言进行了介绍。C语言是一种历史悠久且功能强大的编程语言,尽管有人认为它已经过时,但它仍然是许多系统级编程任务的首选工具。C语言以...
C、C++和Java是三种支持面向对象编程的编程语言,尽管它们在实现OOP的理念上有所不同。 首先,让我们来看看C++。C++是在C语言的基础上添加了面向对象的特性。C++的类(Class)是实现面向对象的核心,它定义了一组...
本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...
《C语言面向对象设计》是一本深入探讨如何在C语言中实现面向对象编程思想的书籍。C语言,作为一种强大的低级编程语言,通常被认为不支持面向对象特性,但通过一些技巧和库(如GObject或C++的C接口),可以实现面向...
C++语言是面向对象编程的代表性语言之一,由Bjarne Stroustrup在C语言的基础上发展而来,既支持过程化编程,又支持面向对象编程,还引入了模板和STL等高级特性。 本书《面向对象程序设计与C++语言》由朱战立编写,...
面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它通过将数据和操作数据的方法封装在对象中,实现了代码的模块化和重用性。本教程聚焦于C++和Java这两种广泛使用的OOP语言的比较,旨在...
面向对象程序设计是C++的核心特性之一,它允许我们通过类和对象来组织和管理代码。在C++中,类定义了一组相关的数据和操作这些数据的方法,而对象则是类的实例,具有类所定义的属性和行为。 1. `break` 和 `...
这个实验代码`test2`提供了一个实践C++面向对象编程的平台,通过分析和运行这些代码,你可以更好地理解面向对象编程的各个方面,并提升自己的编程技巧。在学习过程中,一定要动手尝试修改和扩展代码,这样能更深刻地...
《C++面向对象与Visual C++程序设计案例教程》是一本非常实用的教材,它不仅仅局限于理论知识的介绍,更重要的是通过实际案例引导读者理解和掌握C++面向对象编程以及Visual C++程序设计的相关技术。无论是对于初学者...
C++是一种支持面向对象编程的强类型、编译型语言,由Bjarne Stroustrup于1983年在C语言的基础上扩展而成。 在C++中,面向对象的核心概念包括: 1. 类(Class):类是对象的模板或蓝图,定义了一组特性和行为。它...
C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更高级别的抽象和模块化能力。 在学习面向对象编程时,首先要理解的是类(Class)和对象(Object)。类是...
C++是支持面向对象编程的主流编程语言之一,以其强大的功能和灵活性而备受赞誉。本教程深入剖析了面向对象机制,以及C++的语法细节和使用规则,旨在帮助程序员全面理解和掌握C++编程。 在C++中,面向对象主要体现在...
《C语言面向对象编程》一书由Laurent Deniau编写,首次发布于2001年3月10日,并在同年5月17日进行了修订。该书主要探讨了如何在基于ISO C89标准的C语言项目中运用面向对象设计技巧,使这些项目能够享受到面向对象...