Please explain this small code

#include<iostream>
using namespace std;

class area
{
double dim1, dim2;
public:
void setarea(double d1, double d2)
{
dim1= d1;
dim2 = d2;
}
void getdim(double &d1, double &d2)
{
d1 = dim1;
d2 = dim2;
}
virtual double getarea()
{
cout<<"You must override this function\n";
return 0.0;
}
};

class rectangle : public area
{
public:
double getarea()
{
double d1, d2;
getdim(d1, d2);

return d1*d2;;
}
};

class triangle : public area
{
public:
double getarea()
{
double d1, d2;
getdim(d1, d2);
return 0.5*d1*d2;
}
};

int main()
{
area *p;
rectangle r;
triangle t;

r.setarea(3.3, 4.5);
t.setarea(4.0, 5.0);

p=&r;
cout<<"Rectangle has area: "<<p->getarea()<<'\n';

p=&t;
cout<<"Triangle has area: "<<p->getarea()<<'\n';
}



I only have problem with the getdim() function within "class area". I don't understand what is the necessity of this function.
Futhermore, in the derived class when the virtual function overridden, getdim function is used outside the "class area". But the getdim function is not identified in the derived class.
Is it always possible to use a function to another class where the function is not identified??

Thanks in advance
area is an object? That's mad.
No area is a base class....and there are two derived class
I only have problem with the getdim() function within "class area". I don't understand what is the necessity of this function.

getdim returns the private members of the area class, which can't be taken by any other way.
But the getdim function is not identified in the derived class

It is identified along with all public and protected functions and members derived from the base class.
As Syuf said, derived classes can use (some of) the methods declared in the base class.

getdim() is a public method, so rectangle can see it as it uses public inheritence.

1
2
3
class rectangle : public area
{
    ...


(If it was private inheritence, then the private member would also be visible. But that is BAD!!! It is right that dim1, dim2 are accessed via a method, rather than directly.)

And I agree with kbw, too. The naming is unclear! Is "area" the best name for the base class of trangle and rectangle. And what are dim1 and dim2?
Last edited on
Topic archived. No new replies allowed.