当前位置: 首页 > news >正文

创意福州网站建设百度极简网址

创意福州网站建设,百度极简网址,个人简历在线编辑文档,长春seo建站令class支持隐式类型转换通常是个糟糕的主意。 这条规则有其例外#xff0c;最常见的例外是在建立数值类型时。 例#xff0c;假设你设计一个class用来表现有理数#xff0c;则允许整数“隐式转换”为有理数就很合理。 class Rational{ public:Rational(int numerator0,i…令class支持隐式类型转换通常是个糟糕的主意。 这条规则有其例外最常见的例外是在建立数值类型时。 例假设你设计一个class用来表现有理数则允许整数“隐式转换”为有理数就很合理。 class Rational{ public:Rational(int numerator0,int denominator1);//允许隐式类型转换int numerator() const;//分子的访问函数int denominator() const;//分母的访问函数 }; 将operator*写成Rational成员函数 class Rational{ public://...const Rational operaotr*(const Rational lhs,const Rational rhs); }; 这个设计能让你将两个有理数进行相乘 Rational oneEighth(1,8); Rational oneHalf(1,2); Rational resultoneHalf*oneEnglish; resultresult*oneEighth; 但当你尝试混合式算术时你发现只有一半行得通 resultoneHalf*2; //result2*oneHalf;//错误 为什么 当你以对应的函数形式重写上述两个式子就能发现问题的所在 resultoneHalf.operator*(2); //result2.operaotr*(oneHalf);//错误 因为oneHalf是一个内含operator*函数的class对象所以编译器调用该函数。但2没有相应的class也就没有operator*成员函数因此上述第二行代码是错误的。 那为什么对于oneHalf*2这个表达式不是错误的。其第二个参数是整数2但Rational::operator*需要的实参却是个Rational对象。这里发生了什么为什么第一个可以第二个不可以 这里发生了隐式类型转换implicit type conversion编译器知道你正在传递一个int但函数需要的是Rational但它知道知道调用Rational构造韩素华并赋予你所提供的int就可以变出一个适当的Rational来。因此此调用动作在编译器眼中相当于 const Rational temp(2);//根据2建立一个暂时性的Rational对象 resultoneHalf*temp;//等同于oneHalf.operator*(temp); 注意上述转换只是因为构造函数是non-explicit的若Rational构造函数时explicit则以下语句没有一个可以通过编译 resultoneHalf*2;//错误无法将2转换为一个Rational result2*oneHalf;//错误 但为什么即使Rational构造函数不是explicit仍然只有一个可通过编译另一个不可以。 因为只有当参数被列于参数列parameter list内这个参数才是隐式类型转换的合格参与者。而地位相当于“被调用的成员函数所隶属的那个对象”——即this对象——的那个隐喻参数绝不是隐式类型转换的合格参与者。这就是为什么上述第一次调用可通过编译因为第一次调用伴随一个放在参数列内的参数第二次调用则否。 基于上述讨论让operator*成为一个non-member函数便允许编译器在每一个实参身上执行隐式类型转换 class Ratioanl{//... }; const Rational operaotr*(const Rational lhs,const Rational rhs) {return Rational(lhs.numerator()*rhs.numerator(),lhs.denominator()*rhs.denominator()); } int main() {Rational oneFourth(1,4);Rational result;resultoneFourth*2;//正确result2*oneFourth;//正确 } 还有一点需要考虑operator*是否应该成为Rational class的一个friend函数 就本例而言答案是否定的因为operator*可以完全藉由Rational的public接口完成任务。这导出一个重要的观察member函数的反面是non-member函数不是friend函数。 无论何时若你可以避免friend函数就该避免不能够只因函数不该成为member就自动让它成为friend。 总结 若你需要为某个函数的所有参数包括被this指针所指的那个隐喻参数进行类型转换那么这个函数必须是个non-member。
http://www.hkea.cn/news/14449861/

相关文章:

  • 车陂手机网站开发公司要做个网站吗
  • 扬州企业网站建设网站是用什么程序做的
  • 石家庄市制作网站公司品牌设计师
  • 向公司申请建设网站申请书效果图怎么做出来的
  • 科技公司网站设计服务只做男士衬衫的网站
  • 网站可能存在什么问题吗网站空间域名是什么
  • 免费网站推广工具有哪些做教育培训的网站
  • 长沙做网站团队薪水最高的十大专业
  • 网站建设的技术团队武陵天下网站建设
  • 网站 主办单位性质 个人拼多多怎么申请开店
  • thinkphp开发企业网站线下推广引流渠道
  • 郑州做网站公司有哪些品牌展示型网站有哪些
  • 专业网站建设微信官网开发大兴建设网站公司
  • 网站建设公司的服务特点安徽省工程建设协会网站
  • 做家装的网站有什么不同厦门高端网站案例
  • 网站建设费用一年西地那非副作用太强了
  • 可以举报一个做网络网站发大财吗中国做的比较好的网站有哪些
  • wordpress图文混排深圳搜狗seo
  • 广州 环保 凡人网站建设国外网站服务器租用
  • 苏州企业建站系统模板青岛网站建设优化
  • 石狮服装城商家微网站建设商城网站建设与维护方案
  • 外贸网站外包wordpress免费创建博客
  • 国产前端框架 做网站凡科代理建站登录
  • 推荐系统网站开发河源盛世网站建设
  • 网站建设三要素wordpress如何设置会员中心
  • 网站可以嵌入WordPress省财政厅门户网站三基建设
  • 百度做公司网站多少钱9个广州seo推广神技
  • 延安市违法建设举报网站网站不兼容怎么办啊
  • 人人做全免费网站网站建设教程 金旭亮
  • 天津网站建设 熊掌号wordpress 前台评论