Contents of this section:
- A simple program demonstrating inheritance
- Using protected members
- Protected inheritance
- Multiple inheritance
- Calling base class's constructor in derived class
1. A simple program demonstrating inheritance
#include <iostream>
using namespace std;
class base {
int i;
protected:
int j;
public:
int k;
void seti(int a) { i = a; }
int geti() { return i; }
};
// Inherit base as protected.
class derived : protected base {
public:
void setj(int a) { j = a; } // j is protected here
void setk(int a) { k = a; } // k is also protected
int getj() { return j; }
int getk() { return k; }
};
int main()
{
derived ob;
/* This next line is illegal because seti() is
a protected member of derived, which makes it
inaccessible outside of derived. */
// ob.seti(10);
// cout << ob.geti(); // illegal -- geti() is protected
// ob.k = 10; // also illegal because k is protected
// these next statements are OK
ob.setk(10);
cout << ob.getk() << ' ';
ob.setj(12);
cout << ob.getj() << ' ';
return 0;
}
output
#include <iostream>
using namespace std;
class base
{
int i, j;
public:
void set(int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; }
};
// inheritance
class derived : public base {
int k;
public:
derived(int x) { k = x; }
void showk() { cout << k << "\n"; }
};
int main()
{
derived ob(3);
ob.set(1, 2); // access member of base
ob.show(); // access member of base
ob.showk(); // uses member of derived class
return 0;
}
Output
1 2
3
2. Using protected members
#include <iostream>
using namespace std;
class base
{
protected:
int i, j; // private to base, but accessible to derived
public:
void set(int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; }
};
class derived : public base {
int k;
public:
// derived may access base's i and j
void setk() { k = i*j; }
void showk() { cout << k << "\n"; }
};
int main()
{
derived ob;
ob.set(2, 3); // OK, known to derived
ob.show(); // OK, known to derived
ob.setk();
ob.showk();
return 0;
}
Output
2 3
6
3. Protected inheritance
#include <iostream>
using namespace std;
class base {
int i;
protected:
int j;
public:
int k;
void seti(int a) { i = a; }
int geti() { return i; }
};
// Inherit base as protected.
class derived : protected base {
public:
void setj(int a) { j = a; } // j is protected here
void setk(int a) { k = a; } // k is also protected
int getj() { return j; }
int getk() { return k; }
};
int main()
{
derived ob;
/* This next line is illegal because seti() is
a protected member of derived, which makes it
inaccessible outside of derived. */
// ob.seti(10);
// cout << ob.geti(); // illegal -- geti() is protected
// ob.k = 10; // also illegal because k is protected
// these next statements are OK
ob.setk(10);
cout << ob.getk() << ' ';
ob.setj(12);
cout << ob.getj() << ' ';
return 0;
}
output
10 12
4. Multiple inheritance
#include <iostream>
using namespace std;
class base1 {
protected:
int x;
public:
void showx() { cout << x << "\n"; }
};
class base2 {
protected:
int y;
public:
void showy() { cout << y << "\n"; }
};
// Inherit multiple base classes.
class derived: public base1, public base2 {
public:
void set(int i, int j) { x = i; y = j; }
};
int main()
{
derived ob;
ob.set(10, 20); // provided by derived
ob.showx(); // from base1
ob.showy(); // from base2
return 0;
}
Output
10
20
5. Calling base class's constructor in derived class
#include <iostream>
using namespace std;
class base1 {
protected:
int i;
public:
base1(int x) { i = x; cout << "Constructing base1\n"; }
~base1() { cout << "Destructing base2\n"; }
};
class base2 {
protected:
int k;
public:
base2(int x) { k = x; cout << "Constructing base2\n"; }
~base2() { cout << "Destructing base2\n"; }
};
class derived: public base1, public base2 {
int j;
public:
derived(int x, int y, int z): base1(y), base2(z)
{ j = x; cout << "Constructing derived\n"; }
~derived() { cout << "Destructing derived\n"; }
void show() { cout << i << " " << j << " " << k << "\n"; }
};
int main()
{
derived ob(3, 4, 5);
ob.show(); // displays 4 3 5
return 0;
}
Output
Constructing base1
Constructing base2
Constructing derived
4 3 5
Destructing derived
Destructing base2
Destructing base2
Post A Comment:
0 comments: