### Thread: Help this program

1. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Dec 2012
Posts
9
Rep Power
0

#### Help this program

obj:- Funtion returning object and passing object as function
i create but some erorr

#include<iostream.h>
#include<conio.h>
class Distance{
int feets,inches;
public:
Distance()
{
feets=0;
inches=0;
}
Distance(int i)
{
feets=inches=i;
}
Distance(int f,int i)
{
feets=f;
inches=i;
}
Distance addDistance(Distance d1,Distance d2)
{
Distance d3;
d3.feets=d1.feets+d2.feets;
d3.inches=d1.inches+d2.inches;
return d3;
}
void show()
{
cout<<"\nFeets= "<<feets;
cout<<"\nInches= "<<inches;
}
};
void main()
{
Distance d2(10,20),d3;
int f,i;
clrscr();
cout<<"Enter Distance 1 feets: ";
cin>>f;
cout<<"Enter Distance 2 inches: ";
cin>>i;
Distance d1(f,i);
d1.show();
d2.show();
d3.show();
getch();
}
2. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Dec 2012
Posts
5
Rep Power
0
Originally Posted by Mansoor54
obj:- Funtion returning object and passing object as function
i create but some erorr

#include<iostream.h>
#include<conio.h>
class Distance{
int feets,inches;
public:
Distance()
{
feets=0;
inches=0;
}
Distance(int i)
{
feets=inches=i;
}
Distance(int f,int i)
{
feets=f;
inches=i;
}
Distance addDistance(Distance d1,Distance d2)
{
Distance d3;
d3.feets=d1.feets+d2.feets;
d3.inches=d1.inches+d2.inches;
return d3;
}
void show()
{
cout<<"\nFeets= "<<feets;
cout<<"\nInches= "<<inches;
}
};
void main()
{
Distance d2(10,20),d3;
int f,i;
clrscr();
cout<<"Enter Distance 1 feets: ";
cin>>f;
cout<<"Enter Distance 2 inches: ";
cin>>i;
Distance d1(f,i);
d1.show();
d2.show();
d3.show();
getch();
}
this line contains the error , u see, as addDistance() is a member function of class Distance hence it can be accessed only by variable/object (like d3) of that class using dot(.) operator and not indipendently. so the correct statement is
3. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Dec 2012
Posts
9
Rep Power
0
OK thanks friends

4. There is some semantically very suspect code in this:

Code:
`Distance x(2) ;`
Will instantiate a Distance object representing 2 feet and two inches. Is that really what you intended!?

Code:
`Distance x = addDistance(Distance( 1, 6 ), Distance( 1, 7))`
Will create a Distance object for 2 feet 13 inches, not 3 feet 1 inch.

Code:
`Distance x(1,14)`
Will create a Distance object for 1 feet 14 inches; it would make sense to normalise it to 2 feet 2 inches.

The whole thing can be simplified if you store all distances internally in inches (although this is the 21st Century millimetres might be better). So for example:

Code:
```Distance( int i )
{
inches = i ;
}

Distance( int f, int i )
{
inches = f * 12 + i ;
}

void show()
{
cout << "\nFeet = " << inches / 12 ;
cout << "\nInches = " << inches % 12;
}

static Distance addDistance(const Distance& d1, const& Distance d2)
{
return Distance( d1.inches + d2.inches ) ;
}```
The member function addDistance() can be declared static to overcome your original problem. It is more normal to have a non-static member that just takes a single operand and adds it to the object for which it was called:

Code:
```Distance& addDistance(const Distance& d )
{
inches += d ;
return *this ;
}```
And this is an obvious opportunity to operator overloading:

Also "Feet" is the plural of "Foot", "Feets" is just not English.