2014-08-30 120 views
1

成员函数(“添加”)是否可以创建一个对象(“k”)其类(“距离”)和返回是否与下面给出的代码示例中显示的相同?成员函数是否可以创建同一个类的对象?

class distance 
{ 
    int feet; 
    float inches; 

    public: 

    distance(int feet, float inches) 
    { 
     this->feet=feet; 
     this->inches=inches; 
    } 


    distance add(distance d) 
    { 
     distance k; 
     k.feet=feet+10; 
     k.inches=inches+8; 
     return k; 
    } 
}; 

distance e(0,0.0); 
+0

当然,但是定义了一个默认构造函数。 – 2014-08-30 16:27:45

+1

你为什么不尝试一下? – 0x499602D2 2014-08-30 16:27:46

+0

我很自由地修复你的错别字。如果这些是你的问题的原因,那么就拿它。否则,你不清楚你在问什么。 – 2014-08-30 16:28:49

回答

7

是:只要一类是可拷贝(因为这是)或可移动的,你可以从任何返回实例函数(包括它自己的成员函数)。但是,这

distance k; 

将无法​​工作,因为没有默认的构造函数。相反,使用可用的构造函数:

return distance(feet+10, inches+8); 

(您可能还需要纠正第二个构造参数的名称,因为它是你设置inches成员自身的价值未初始化的并且add可能想。用它的参数做一些事情,而不是仅仅添加一个任意常量。)

+0

Sry,我在那里犯了一个错误。我现在已经改变了第二个构造函数参数。我如何绘制这个类的默认构造函数来使用'距离k'?谢谢。 – h8pathak 2014-08-30 17:13:42

+0

@ h8pathak:如果你真的想要一个默认的构造函数,那么写一个像'distance():feet(0),inches(0){}',或者将默认值添加到现有构造函数的参数中,'distance(int feet = 0,float inches = 0)',以便它可用作默认构造函数。但请考虑这样做;它可能不太容易出错,只允许用指定的值进行施工。 – 2014-08-30 17:18:10

+0

难道它不工作,因为我在创建对象时将默认值传递给了构造函数? – h8pathak 2014-08-30 17:24:36

2

是的,你可以在任何它的方法创建相同的类的对象