An obvious solution, already suggested, is implementing
getter
and
setter
(if you new both read and write access to the variables) methods in class
data
and then use it in class
level
.
#include <iostream>
using namespace std;
class data
{
int d; public:
data(int d):d(d){}
int get_d() const {return d;} void set_d(int d){this->d = d;} };
class level
{
public:
void show_d(const data & dt)
{
cout << dt.get_d() << endl;
}
void inc_d(data & dt)
{
dt.set_d( dt.get_d() + 1);
}
};
int main()
{
data dt(5);
level lv;
lv.show_d( dt);
lv.inc_d(dt);
lv.show_d(dt);
}
This way, however, the private variable is exposed (via getter and setter) to all the
data
class consumers.
Another approach uses the
friend[
^] specifier to grant to
level
class full access to all
data
class members.
#include <iostream>
using namespace std;
class level; class data
{
int d; public:
data(int d):d(d){}
friend class level; };
class level
{
public:
void show_d(const data & dt)
{
cout << dt.d << endl;
}
void inc_d(data & dt)
{
++dt.d;
}
};
int main()
{
data dt(5);
level lv;
lv.show_d( dt);
lv.inc_d(dt);
lv.show_d(dt);
}