【问题标题】:Finding the object for which the constructor will be called while converting one class type to another class type在将一种类类型转换为另一种类类型时查找将为其调用构造函数的对象
【发布时间】:2022-01-18 06:17:47
【问题描述】:
#include<iostream>
using namespace std;
class meter
{
    private:
      float m;
    public:
       meter()
       {
           m=0.0;
       }
       meter(float m1)
       {
           m=m1;
       }
       void display()
       {
           cout<<"the equivalient meter is "<<m<<endl;
       }
};
class feet
{
    private:
      float f;
    public:
        void input()
        {
            cout<<"enter the value of feet"<<endl;
            cin>>f;
        }
        operator meter()
        {
            float m1=f*0.3048;
            return(meter(m1)); //line of interest
        }
};
int main()
{
    feet f2;
    meter m2;
    f2.input();
    m2=f2; //type conversion call
    m2.display();
    return(0);
}

在上述代码中,在感兴趣的行中; “return(meter(m1))”为哪个对象调用构造函数meter(float m1)?我尝试一次调试并观察一个步骤,但仍然无法弄清楚,我观察到没有创建新对象。是对象m2吗?

【问题讨论】:

  • 它是一个构造函数,它正在构造一个仪表对象。它以前没有被调用过,构造函数永远不会。它没有名字,因为它正在构建一个临时的。
  • 不清楚你在问什么。 return(meter(m1)); 使用接受float 的构造函数构造一个meter 类型的未命名对象。将此类对象分配给 m2(或更一般地,返回给调用者)的方式因 C++ 标准而异。

标签: c++ type-conversion operators


【解决方案1】:

它正在调用类meter的构造函数。
它会创建临时对象。
它是未命名的对象。 More Informations here.

您的代码将像这样工作。

  1. m2 = f2.meter()
  2. f2.meter() 返回临时对象。
  3. m2.operator=(&lt;temp object&gt;)

meter m = meter(1.2);
此代码也使用临时对象。

检查此code 以检查临时对象的生命周期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2010-09-23
    • 2023-02-07
    • 1970-01-01
    • 2020-12-02
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多