`
jimmee
  • 浏览: 538667 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

从c面向对象的实现理解c++的对象(一)

阅读更多

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啊, 呵呵.

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    程序员8年对于c++ 面向对象的理解

    【C++面向对象的理解】 C++是一门强大的编程语言,尤其以其面向对象特性著称。面向对象编程(Object-Oriented Programming, OOP)是一种设计理念,它基于对象、类、继承、封装、多态等核心概念。8年的编程经验使得...

    面向对象程序设计c++课后答案

    根据给定文件的信息,我们可以总结出以下相关的C++知识点: ### 面向对象程序设计C++课后答案概述 ...这些知识点涵盖了从C++的基本语法到面向对象编程的核心概念,为学习者提供了全面的理解和应用C++的基础。

    面向对象技术与C++编程

    C++是一种支持面向对象编程(OOP)的强类型、编译型、通用编程语言,由Bjarne Stroustrup在C语言的基础上发展而来,既具有过程性编程的特点,又引入了面向对象的特性。 标题"面向对象技术与C++编程"表明这组课件...

    殷人昆数据结构用面向对象方法与C++语言描述第二版扫描版

    《殷人昆数据结构用面向对象方法与C++语言描述》是数据结构领域一本重要的教材,尤其对于学习C++编程的计算机科学和技术专业的学生来说,它提供了深入理解数据结构和算法的基础。本书的第二版在第一版的基础上进行了...

    面向对象编程:C++与Java比较教程 英文版

    本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...

    Java面向对象编程:从C++到Java—理解面向对象

    总之,从C++转向Java的过程中,理解面向对象编程的概念以及Java与C/C++之间的主要差异至关重要。通过学习Java的运行机制、面向对象的核心特性、文件结构与命名空间管理以及异常处理等知识,开发者可以更好地适应Java...

    (麻省理工免费课程)C语言内存管理和C++面向对象编程

    在《麻省理工免费课程:C语言内存管理和C++面向对象编程》这一课程中,首先对C语言进行了介绍。C语言是一种历史悠久且功能强大的编程语言,尽管有人认为它已经过时,但它仍然是许多系统级编程任务的首选工具。C语言以...

    使用C、C++、Java实现面向对象demo

    C、C++和Java是三种支持面向对象编程的编程语言,尽管它们在实现OOP的理念上有所不同。 首先,让我们来看看C++。C++是在C语言的基础上添加了面向对象的特性。C++的类(Class)是实现面向对象的核心,它定义了一组...

    面向对象编程C++和Java比较教程 中英文完整版 pdf

    本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...

    c语言面向对象设计

    《C语言面向对象设计》是一本深入探讨如何在C语言中实现面向对象编程思想的书籍。C语言,作为一种强大的低级编程语言,通常被认为不支持面向对象特性,但通过一些技巧和库(如GObject或C++的C接口),可以实现面向...

    面向对象程序设计与c++语言 朱战立

    C++语言是面向对象编程的代表性语言之一,由Bjarne Stroustrup在C语言的基础上发展而来,既支持过程化编程,又支持面向对象编程,还引入了模板和STL等高级特性。 本书《面向对象程序设计与C++语言》由朱战立编写,...

    面向对象编程C++和Java比较教程

    面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它通过将数据和操作数据的方法封装在对象中,实现了代码的模块化和重用性。本教程聚焦于C++和Java这两种广泛使用的OOP语言的比较,旨在...

    面向对象程序设计C++ (4).pdf

    面向对象程序设计是C++的核心特性之一,它允许我们通过类和对象来组织和管理代码。在C++中,类定义了一组相关的数据和操作这些数据的方法,而对象则是类的实例,具有类所定义的属性和行为。 1. `break` 和 `...

    C++面向对象实验代码实验2

    这个实验代码`test2`提供了一个实践C++面向对象编程的平台,通过分析和运行这些代码,你可以更好地理解面向对象编程的各个方面,并提升自己的编程技巧。在学习过程中,一定要动手尝试修改和扩展代码,这样能更深刻地...

    C++面向对象与Visual C++程序设计案例教程

    《C++面向对象与Visual C++程序设计案例教程》是一本非常实用的教材,它不仅仅局限于理论知识的介绍,更重要的是通过实际案例引导读者理解和掌握C++面向对象编程以及Visual C++程序设计的相关技术。无论是对于初学者...

    面向对象与c++复习试卷

    C++是一种支持面向对象编程的强类型、编译型语言,由Bjarne Stroustrup于1983年在C语言的基础上扩展而成。 在C++中,面向对象的核心概念包括: 1. 类(Class):类是对象的模板或蓝图,定义了一组特性和行为。它...

    面向对象程序设计与C++语言

    C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更高级别的抽象和模块化能力。 在学习面向对象编程时,首先要理解的是类(Class)和对象(Object)。类是...

    面向对象思想,c++编程思想

    C++是支持面向对象编程的主流编程语言之一,以其强大的功能和灵活性而备受赞誉。本教程深入剖析了面向对象机制,以及C++的语法细节和使用规则,旨在帮助程序员全面理解和掌握C++编程。 在C++中,面向对象主要体现在...

    C语言面向对象编程

    《C语言面向对象编程》一书由Laurent Deniau编写,首次发布于2001年3月10日,并在同年5月17日进行了修订。该书主要探讨了如何在基于ISO C89标准的C语言项目中运用面向对象设计技巧,使这些项目能够享受到面向对象...

Global site tag (gtag.js) - Google Analytics