用C语言实现C++的继承、多态

#include <iostream>

using namespace std;

//C++中的继承与多态
struct A
{
  virtual void fun()  //C++中的多态:通过虚函数实现
  {
    cout << "A:fun()" << endl;
  }
  int a;
};

struct B:public A     //C++中的继承:B类公有继承A类
{
  virtual void fun()  //C++中的多态:通过虚函数实现(子类的关键字virtual可加可不加)
  {
   cout << "B:fun()" << endl;
  }
  int b;
};



//C语言模拟C++的继承与多态

typedef void (*FUN)();   //定义一个函数指针来实现对成员函数的继承

struct _A    //父类
{
  FUN _fun;  //由于C语言中结构体不能包含函数,故只能用函数指针在外面实现
  int _a;
};

struct _B     //子类
{
  _A _a_;   //在子类中定义一个基类的对象即可实现对父类的继承
  int _b;
};

void _fA()    //父类的同名函数
{
  printf("_A:_fun()\n");
}

void _fB()    //子类的同名函数
{
  printf("_B:_fun()\n");
}

int main()
{

  //测试C++中的继承与多态

  A a;  //定义一个父类对象a

  B b;  //定义一个子类对象b

 

  A* p1 = &a;  //定义一个父类指针指向父类的对象

  p1->fun();  //调用父类的同名函数

  p1 = &b;   //让父类指针指向子类的对象

  p1->fun();  //调用子类的同名函数

 

  //C语言模拟继承与多态的测试

  _A _a;  //定义一个父类对象_a

  _B _b;  //定义一个子类对象_b

  _a._fun = _fA;    //父类的对象调用父类的同名函数

  _b._a_._fun = _fB;  //子类的对象调用子类的同名函数



  _A* p2 = &_a;  //定义一个父类指针指向父类的对象

  p2->_fun();   //调用父类的同名函数

  p2 = (_A*)&_b; //让父类指针指向子类的对象,由于类型不匹配所以要进行强转

  p2->_fun();   //调用子类的同名函数

}


// 运行结果
// A:fun()
// B:fun()
// _A:_fun()
// _B:_fun()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答您的问题。在C语言中,封装可以通过结构体来实现。结构体中的成员变量可以被定义为私有的,只能通过结构体提供的接口函数来访问。继承可以通过结构体嵌套来实现,子结构体可以继承父结构体中的成员变量和函数指针,并可以添加自己的成员变量和函数指针。多态可以通过函数指针来实现,父结构体中的函数指针可以指向不同的子结构体中的同名函数,从而实现多态。 下面是一个示例代码,演示了如何在C语言实现封装、继承多态的特性: ```c #include <stdio.h> // 父结构体 typedef struct { int x; } Base; // 子结构体 typedef struct { Base base; // 嵌套父结构体 int y; } Derived; // 父结构体的接口函数 void setX(Base *base, int x) { base->x = x; } int getX(Base *base) { return base->x; } // 子结构体的接口函数 void setY(Derived *derived, int y) { derived->y = y; } int getY(Derived *derived) { return derived->y; } // 多态的函数 void printX(Base *base) { printf("%d\n", base->x); } int main() { Derived d; setX(&d.base, 1); setY(&d, 2); printf("%d %d\n", getX(&d.base), getY(&d)); printX(&d.base); return 0; } ``` 在上面的示例代码中,我们定义了一个父结构体`Base`和一个子结构体`Derived`。`Derived`结构体嵌套了`Base`结构体,并添加了自己的成员变量`y`。我们也定义了一些接口函数来操作这些成员变量。`printX`函数是一个多态的函数,可以接受`Base`结构体的指针作为参数,实现多态的特性。 希望这个示例代码可以帮助您更好地理解如何在C语言实现封装、继承多态的特性。如果还有其他问题,请随时询问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值