Publicly inherit a base class but making some of public method as private
Last Updated :
25 Feb, 2018
There are certain situation when we want to make some of the public base class functions as private in the derived class. Suppose both base and child class has getter and setter methods
#include <iostream>
using namespace std;
class Base {
int i;
public :
Base() {}
void setBaseProperties( int i)
{
this ->i = i;
}
void showBaseProperties()
{
std::cout << endl
<< "i = " << i;
}
virtual ~Base() {}
};
class Child : public Base {
int j;
int k;
public :
void setChildProperties( int i, int j, int k)
{
setBaseProperties(i);
this ->j = j;
this ->k = k;
}
void showChildProperties()
{
showBaseProperties();
cout << " j = " << j << " k = " << k;
}
};
int main()
{
Child c;
c.setChildProperties(1, 2, 3);
c.setBaseProperties(4);
c.showChildProperties();
return 0;
}
|
Output:
i = 4 j = 2 k = 3
Here if we need to restrict the call of function “setBaseProperties” and “showBaseProperties” with Child class object “c”. This can be achieved without overriding the function as below:
We re-declare base class functions in derived class scope using “using” syntax. We do it in private section of derived class.
#include <iostream>
using namespace std;
class Base {
int i;
public :
Base() {}
void setBaseProperties( int i)
{
this ->i = i;
}
void showBaseProperties()
{
std::cout << endl
<< "i = " << i;
}
virtual ~Base() {}
};
class Child : public Base {
int j;
int k;
using Base::showBaseProperties;
using Base::setBaseProperties;
public :
void setChildProperties( int i, int j, int k)
{
setBaseProperties(i);
this ->j = j;
this ->k = k;
}
void showChildProperties()
{
showBaseProperties();
cout << " j = " << j << " k = " << k;
}
};
int main()
{
Child c;
c.setChildProperties(1, 2, 3);
c.showChildProperties();
return 0;
}
|
Output:
i = 1 j = 2 k = 3
Share your thoughts in the comments
Please Login to comment...