码迷,mamicode.com
首页 > 其他好文 > 详细

non-explicite-one-argumen-constructor

时间:2020-08-19 19:12:19      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:idt   lazy   图片   调用   ons   operator   出现   默认值   xpl   

 

class Fraction
{
public:
    Fraction(int num,int den=1):m_numerator(num),m_denominator(den)
    {
        cout << "构造函数被默默调用了哦!!!" << endl;
    }
    ~Fraction(){ cout << "析构函数被默默-调用了哦!!!" << endl; }
    Fraction operator +(const Fraction& f) {
        return Fraction (......);
    }
private:
    double m_numerator;
    double m_denominator;
};

 

 

 

 技术图片

注解:

  1. 蓝色这种函数相当特别,特别把这一种构造函数叫做non-explcit-one-argument ctor. 
  2. argument代表实参,但后一个参数有初值,所以此时要创建一个Fraction的对象,只要提供一个实参就行了。因为第二个实参有默认值。这样的设计是合理的,因为在数学上,3等于1分之3,分母默认1.
  3. 这个蓝色背景的函数属于two parameter, one argument.后者的意思是只要一个实参就够了。给两个实参也可以的。
  4. explicite是个关键字,可以出现在构造函数的前面,现在没有出现,所以就叫做non-explicit-one-argument ctor.
  5. Fraction d2=f+4; 这一句会让编译器寻找‘+’这个动作,它找到了,就是函数operator+() . +要作用在左边的操作数上,左边的f调用+,但是它发现+的右边的操作数也是一个Fraction(注意,类的成员函数有个隐含的this指针),而实际调用的时候却是f+4,右边的操作数不是Fraction类型的对象。此时编译器会看看能不能把4转换为Fraction类型的对象,如果有4能转换为Fraction,那就是分数+分数,就符合那个成员函数的设计了。

 

non-explicite-one-argumen-constructor

标签:idt   lazy   图片   调用   ons   operator   出现   默认值   xpl   

原文地址:https://www.cnblogs.com/yibeimingyue/p/13513878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!