C++对象模型——单继承

Code:
  1. #include <iostream>       
  2. using namespace std;       
  3. class point       
  4. {       
  5. public:    
  6.     point(float a):x(a){}     
  7.     virtual void f(){cout << "point::f() called" << endl;}          
  8.     virtual void g(){cout << "point::g() called" << endl;}    
  9.     void h(){cout << "point::h() called" << endl;}   
  10. public:   
  11.     float x;   
  12. };    
  13. class point2D:public point   
  14. {   
  15. public:   
  16.     point2D(float a,float b):point(a),y(b){}   
  17.     void g(){ cout << "point2D::g() called" << endl;}   
  18.     virtual void z(){cout << "point2D::z() called" << endl;}   
  19. private:   
  20.     float y;   
  21. };   
  22. int main()       
  23. {       
  24.     point2D t(5,6);   
  25.     typedef void (*PFUN)();   
  26.     PFUN pfun;   
  27.     pfun = (PFUN)(*(int*)(*(int*)(&t)));   
  28.     pfun();   
  29.     pfun = (PFUN)(*((int*)(*(int*)(&t))+1));   
  30.     pfun();   
  31.     pfun = (PFUN)(*((int*)(*(int*)(&t))+2));   
  32.     pfun();   
  33.     cout << *(float*)((float*)(&t)+1)<< endl;   
  34.     cout << *(float*)((float*)(&t)+2)<< endl;   
  35.     return 0;       
  36. }    

point的对象模型:

        4B vptr -----------------> point::f();

         4B float x;                     point::g();

point2D的对象模型:

        4B vptr----------------->point::f();

        4B point::x;                 point2D::g():

         4B point2D::y;          point2D::z();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值