#1
  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);
    d3=addDistance(d1,d2);
    d1.show();
    d2.show();
    d3.show();
    getch();
    }
  2. #2
  3. 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);
    d3=addDistance(d1,d2);
    d1.show();
    d2.show();
    d3.show();
    getch();
    }
    d3=addDistance(d1,d2);
    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
    d3=d3.addDistance(d1,d2);
  4. #3
  5. No Profile Picture
    Registered User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Dec 2012
    Posts
    9
    Rep Power
    0
    OK thanks friends
  6. #4
  7. Contributing User

    Join Date
    Aug 2003
    Location
    UK
    Posts
    5,111
    Rep Power
    1803

    Post


    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.

IMN logo majestic logo threadwatch logo seochat tools logo