zoukankan      html  css  js  c++  java
  • C++隐式类类型转化

    隐式类类型转换:可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换

     1 class Person
     2 {
     3 public:
     4     Person(string name,int age = 10): mName()name, mAge(age){};
     5     bool isSameName(const Person & person){
     6         return person.mName == mName;
     7 }
     8 private:
     9     string mName;
    10     int      mAge;
    11 }    
    12 int main()
    13 {
    14     Person A(A-A-A);
    15     Person B(B-B-B);
    16     cout<<A.isSameName<<endl;//正常调用
    17     cout<<String(A-A-A)<<endl;//调用隐式类类型转换 传进参数稳string类型然而isSaneName()的参数为Person类型 
    //即string 调用了Person默认构造函数 以满足isSameName的函数期待
    18 19 system("pause"); 20 }

    用explicit可以避免以上现象发生

    总结

    1.   可以使用一个实参进行调用,不是指构造函数只能有一个形参
    2.   隐式类类型转换容易引起错误,除非你有明确理由使用隐式类类型转换,否则,将可以用一个实参进行调用的构造函数都声明为explicit。
    3.       explicit只能用于类内部构造函数的声明。它虽然能避免隐式类型转换带来的问题,但需要用户能够显式创建临时对象(对用户提出了要求)。
  • 相关阅读:
    NOIp199Cantor表
    NOIP2001数的计算
    NOIP2010排队接水
    普及组2006第三题jam的计数法
    2013提高组积木大赛
    洛谷1223排队接水
    9.3noip模拟赛第一题卡片
    2002普及组第四题过河卒
    细胞分裂(NOIP2009 普及组第三题)
    道路游戏(NOIP2009 普及组第四题)
  • 原文地址:https://www.cnblogs.com/LearningTheLoad/p/6828613.html
Copyright © 2011-2022 走看看