注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

类引用对象作函数参数的时候(类型向上转换),引用和非引用(值传递)的区别  

2016-12-29 21:05:09|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
class Base1
{
int m_i;
public:
Base1(int i) {m_i = i;}
virtual int sum() {return m_i;}//如果sum函数是非virtual函数,那么callfun(d)依旧调用的是Base1::sum,此时发生了类型向上转换;如果是virtual函数,那么根据多态原理,会调用派生类的sum函数
};
class Derived1 : public Base1
{
int m_j;
public:
Derived1(int i, int j) :Base1(i), m_j(j) {}
virtual int sum() {return Base1::sum() + m_j;}
};
void callfun(Base1 &b)//如果函数参数是非引用,会发生切片,那么callfun(d)依旧会调用Base1::sum
{
cout<<b.sum()<<endl;
}
void main()  
{  
Base1 b(100);
Derived1 d(200, 300);
callfun(b);
callfun(d);
}  
输出:
100
500
非引用输出:
100
200
  评论这张
 
阅读(46)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017