InterviewGuide icon indicating copy to clipboard operation
InterviewGuide copied to clipboard

c/c++ 128、用C语言实现C++的继承 疑惑

Open relaxcn opened this issue 1 year ago • 0 comments

https://interviewguide.cn/notes/03-hunting_job/02-interview/01-01-07-basic.html#_128%E3%80%81%E7%94%A8c%E8%AF%AD%E8%A8%80%E5%AE%9E%E7%8E%B0c-%E7%9A%84%E7%BB%A7%E6%89%BF

这一段,用 C 语言的函数指针来模拟继承和多态,为什么 p2 可以直接调用_b 的 _fun() ,但是 _b 只有一个 _A 的对象 _a_ ,并没有这个函数指针。

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

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

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

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

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



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

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

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

  // p2 类型虽然有 _fun 但是实际上它指向的结构体是 _b ,_b 没有 _fun() 这个是怎么调用的。
  p2->_fun();   //调用子类的同名函数

期待大神解答。感谢😄

relaxcn avatar Apr 04 '23 08:04 relaxcn