派生类到基类转换的可访问性和虚函数所占用的sizeof空间

  先看一段代码:

ExpandedBlockStart.gif 代码
#include  < iostream >
using   namespace  std;

class  Base{
public :
    
virtual   void  fun()
    {cout 
<<   " Base "   <<  endl;}
    
    
int  geti()
    {
return  i;}
    
    
void  seti( int  val)
    {i 
=  val;}
protected :
    
int  j;
private :
    
int  i;
};

class  Son :  private  Base{
public :
    
int  use_base()
    {
return  j;}
private :
    
void  fun()
    {cout 
<<   " son1 "   <<  endl;}
    
int  val;
};

class  Test{
    
virtual   void  fun()
    {cout 
<<   " Base "   <<  endl;}
};

void  myfun(Base &  obj)
{
    obj.fun();
}

void  main()
{
    Son s;
    Base b;   
    cout 
<<   " sizeof(Base)  "   <<   sizeof (Base)  <<  endl;
    cout 
<<   " sizeof(Son)  "   <<   sizeof (Son)  <<  endl;
    cout 
<<   " sizeof(Test)  "   <<   sizeof (Test)  <<  endl;
    myfun(s);   
// 错误提示:error C2243: “类型转换”: 从“Son *”到“Base &”的转换存在,但无法访问
     myfun(b);
    system(
" pause " );
}

 

  关于错误提示,s因为是private继承类的对象,继承来的成员函数fun()变为自己的private成员函数,因此,在myfun()中,代码不能直接访问已经成为private的成员函数fun()。

 

  关于虚函数的占用空间,在32位机器上,一个虚函数占用4B空间。

 

  如果去掉具有错误提示的行,则运行结果为:

  

转载于:https://www.cnblogs.com/younes/archive/2009/12/10/1621098.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值