Forums: » Register « |  Free Tools |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support |

New Free Tools on Dev Shed!

#1
December 3rd, 2012, 10:41 PM
 Mansoor54
Registered User

Join Date: Dec 2012
Posts: 9
Time spent in forums: 1 h 33 m 54 sec
Reputation 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 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
December 4th, 2012, 12:53 AM
 abhiakhi
Registered User

Join Date: Dec 2012
Posts: 5
Time spent in forums: 1 h 25 m 32 sec
Reputation Power: 0
Quote:
 Originally Posted by Mansoor54 obj:- Funtion returning object and passing object as function i create but some erorr #include #include 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= "<>f; cout<<"Enter Distance 2 inches: "; cin>>i; Distance d1(f,i); d3=addDistance(d1,d2); 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
December 4th, 2012, 10:26 PM
 Mansoor54
Registered User

Join Date: Dec 2012
Posts: 9
Time spent in forums: 1 h 33 m 54 sec
Reputation Power: 0
OK thanks friends

#4
December 5th, 2012, 11:44 AM
 clifford
Contributing User

Join Date: Aug 2003
Location: UK
Posts: 4,975
Time spent in forums: 1 Month 4 Days 5 h 12 m 47 sec
Reputation Power: 1801

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 ;
}```

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

 Viewing: Dev Shed Forums > Programming Languages > C Programming > Help this program