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
123#include <iostream> using namespace std; class base
123456789101112131415161718192021222324252627{ 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
121 2 3
12
122. Using protected members
1234#include <iostream> using namespace std; class base
1234567891011121314151617181920212223242526272829 { 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; }
12
1Output
122 3 6
12
12
13. 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
110 12
12
14. Multiple inheritance
12
123456789101112131415161718192021222324252627282930313233#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; }
12
Output
1210 20
12
125. Calling base class's constructor in derived class
12
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#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: