纯c结构体与c++结构体的理解
来源:互联网 发布:linux mysql下载64位 编辑:程序博客网 时间:2024/06/14 07:23
//main.cpp
//如果文件名是以.cpp结尾的说明这是一个c++的源程序,//在c++的源程序中,class的作用与struct的作用一模一样,//除了他们默认的成员属性不一样除外(class 默认是私有的,//struct默认是共有的),同样struct有this指针,同样struct//可以继承,同样struct也支持c++多态的所有属性,同样struct//有虚表,下面就是我做的一个struct的虚表例子。//记住在.cpp结尾的源文件里面,struct才与class基本一致。#include <stdlib.h>#include <stdio.h>struct A{ virtual void fun() = 0;};struct B : public A{ void fun() { printf("B::fun()\n"); }};typedef void (*PF) ();void Printf(void *arg){ PF f = PF(*(int *)arg); f();}void test(){ B b; Printf((int *)*(int *)&b);}int main(){ test(); return 0;}
//main.c
#include <stdlib.h>#include <stdio.h>//因为在纯c语言中的struct与c++中的属性是不太一样的。//首先在纯c语言的struct是不支持多态的,不可以构造,//没有this,不可以有函数,如果我们要用纯c结构体来//模拟一个class就会很困难,下面是我粗燥的写法。struct A;typedef void(*PF)(struct A *this);//函数指针数组。struct vPtrNode;typedef void(*PV)(struct vPtrNode *this);struct vPtrNode{ PV pf;//模拟虚表。};void vtrprintf(struct vPtrNode *this){ printf("vtrprintf()\n");}struct A{ PF f;//因为纯c语言的结构体内部是不可以定义函数的,所以用函数指针来代替。 int a; struct vPtrNode *vptr; struct B { PF p; struct A *b;//模拟继承,使结构体B调用基类A中的函数。 }B;};void fun1(struct A *this)//this指针的模拟。{ this->a = 100; printf("fun1():a==%d\n",this->a);}int main(){ struct A a; a.f = (PF)fun1;//模拟this。 a.f(&a); ////////////////// a.B.p = (PF)fun1;//模式子类函数p覆盖基类中的函数f。 a.B.p(&a); a.B.b = (struct A *)malloc(sizeof(struct A)); //这里必须开辟空间,如果不开辟空间,你给指针的指针赋值一个确定 //的函数地址会出现段错误。 a.B.b->f = (PF)fun1; a.B.b->f(&a);//模拟子类调用父亲类的函数f。 //////////////////// //因为虚表只在父类中存在。 a.vptr = (struct vPtrNode *)malloc(sizeof(struct vPtrNode)); a.vptr->pf = (PV)vtrprintf; struct vPtrNode vptr; a.vptr->pf(&vptr); return 0;}
1 0
- 纯c结构体与c++结构体的理解
- <C语言>结构体理解
- 纯c与c++:函数传递-指针/引用,typdef struct + 结构体/枚举
- c的结构体
- 【C#】结构体与类的比较
- C与C++结构体的区别
- C与C++的结构体区别
- C++-类与结构体的区别
- C与C++结构体的区别
- c++-类与结构体
- C与C++结构体
- C/C++中结构体定义的效率与内存浪费问题 的 理解与分析
- 理解c语言中的结构体以及结构体标签
- C语言结构体(struct)理解
- c结构体对齐深刻理解
- c结构体对齐深刻理解
- c、c++、c# 结构体与类的区别
- 结构体指针(关于C语言传值的理解)
- SSL协议详解
- 通过拍照或者图库获取图片并上传服务器
- 关于出现( linker command failed with exit code 1)错误总结
- Study JQuery《源码分析core-整体架构》
- Android多线程及异步处理问题详细探讨
- 纯c结构体与c++结构体的理解
- Java学习之多态
- 朝花夕拾——Java的内部类
- ALV OO: 最简单的ALV OO实例-Docking容器
- 《排序算法》——快速排序(Java)
- 如果有来生
- CActiveForm 使用单选框/复选框去除自动换行<br>
- 虚拟机拷贝,移动引起网卡初始化的问题
- js在IE和Firefox下不同之处