C语言模式实现C++继承和多态
来源:互联网 发布:网络社会工作局局长 编辑:程序博客网 时间:2024/05/16 18:51
C语言模式实现C++继承和多态
描述:
C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达
到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数。
C++中的继承、多态
继承是面向对象复用的重要手段。通过继承定义一个类,继承是类型之间的关系建模,共享公有的东西,实现各自本质
不同的东西。
继承是一种复用手段,在继承关系里基类的成员类的成员派生类的成员,由此达到复用的目的。
所谓多态,其实就是“多种形态”。
C++中虚函数的主要作用就是实现多态。简单说父类的指针/引用调用重写的虚函数,当父类指针/引用指向父类对象
时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数。
#include <iostream>#include <assert.h>#include <Windows.h>using namespace std;//C++中的多态class AA{public:virtual void fun1(){cout << "AA::fun1()" << endl;}virtual void fun2(){cout << "AA::fun2()" << endl;}private:int _aa;};class BB :public AA //公有继承{public:virtual void fun1() //子类重写父类的虚函数时,子类的virtual可以不写{cout << "BB::fun1()" << endl;}virtual void fun2(){cout << "BB::fun2()" << endl;}private:int _bb;};
#include "源.h"void Test(){AA tty;BB vvz;AA* p = &tty; //父类指针指向父类引用p->fun1(); //父类指针指向父类对象p->fun2();p = &vvz; //父类指针指向子类引用,多态体现p->fun1(); //父类指针指向子类对象p->fun2();}int main(){Test();system("pause");return 0;}
而用C语言又怎样实现C++的继承和多态呢?
C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的。
C++在语言级别添加了很多新的机制(封装、继承、多态...)。而在C语言中,我们也可以使用这样的机制,前提是我们需要自己实现。
基本思想:
1.结构体
在C语言中,我们常常把一个对象用结构体进行封装,这样便于对对象进行操作,例:
struct AA{int a;char b;}xxy;结构体可以嵌套,因而可以把一个结构体当成另一个结构体的成员,例:
struct AA{int a;char b;}xxy;struct BB{int c;double q;struct AA tty;}zzo;
2.函数指针
顾名思义,函数指针就是指向函数的指针,它是一个指针,指向函数的首地址,函数名即为该函数的首地址。
//Fun函数为一个返回值为char* 的函数char* Fun(char* p1, char* p2){int i = 0;i = strcmp(p1, p2);if (i == 0){return p1;}else{return p2;}}int main(){char* (*tty)(char* p1, char* p2); //tty为一个函数指针tty = &Fun;(*tty)("aa", "bb");system("pause");return 0;}
C语言实现继承、多态
在C语言中,可以利用“结构在内存中的布局与结构的声明具有一致的顺序”这一事实实现继承。
//用一个函数指针typedef void(*FUN)(); //父类struct AA{FUN fun;};//子类struct BB{AA a;};void FunA(){printf("AA::fun\n");}void FunB(){printf("BB::fun\n");}
void Test(){AA a;BB b;a.fun = FunA; //父类对象调用父类函数b.a.fun = FunB; //子类对象调用子类函数AA* p = &a; //定义一个父类指针指向父类对象p->fun(); //调用父类的fun函数p = (AA*)&b; //父类指针指向子类对象p->fun(); //调用子类的fun函数}int main(){Test();system("pause");return 0;}
阅读全文
6 0
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- 模拟继承和多态--C语言模式实现C++继承和多态
- C语言实现继承和多态
- C语言实现继承和多态
- C语言实现继承和多态
- C语言实现继承和多态
- C语言实现继承和多态
- C语言实现继承和多态
- C语言实现继承和多态
- C语言实现继承和多态
- C 语言实现多态和继承
- web解析Dicom
- tomcat8集群实现session共享 nginx负载均衡
- hdu 1498 最小顶点覆盖
- 文章标题
- 学习
- C语言模式实现C++继承和多态
- flownet2-errors
- 逻辑与和逻辑或运算符重载
- iframe内弹窗元素距离视窗顶部一定得距离
- python中字节、数组、字符串类型的
- 一张图明了Kerberos原理
- HashMap实现原理详解
- Redis 集群搭建详细指南
- 文章标题 CDN 原理