• We just launched and are currently in beta. Join us as we build and grow the community.

Inheritance in C++

electroscythe

Binary Distribution Expert
E Rep
0
0
0
Rep
0
E Vouches
0
0
0
Vouches
0
Posts
142
Likes
177
Bits
2 MONTHS
2 2 MONTHS OF SERVICE
LEVEL 1 400 XP
One of the main goals of OOP is the recycling of the classes that you already created. It saves a lot of you time and efforts and makes your code to be more efficient. One of the way to re-use your classes is inheritance. The inheritance is an important concept of OOP. That's why everyone has to understand this concept.
Let's start from an example. We have a class man that has that has the following structure
  1. #include <iostream>
  2. using

    namespace

    std;
  3. class

    man
  4. {
  5. public

    :
  6. man(

    string _name, int

    _age, string _sex)

    ;
  7. show_man(

    )

    ;
  8. private

    :
  9. string name;
  10. int

    age;
  11. string sex;
  12. }

    ;

And you need a class student, that must have the following variables:
  1. string university;
  2. double

    mark;
  3. string profession;

In this case you have to choose: create a new class student or create a derived class. Use of the inheritance allows you to exclude duplication of code in your program. To declare a derived class you have to use this form of declaration of class:
class

derived_class:

access_specifier base_class

In our case we will act in the next way:
  1. class

    student :

    public

    man
  2. {
  3. public

    :
  4. student(

    string _name, int

    _age, string _sex,string _university,double

    _mark,string _profession)

    ;
  5. show_student(

    )

    ;
  6. private

    :
  7. string university;
  8. double

    mark;
  9. string profession;
  10. }

When you derive a class from base class, private elements of base class are not available for the derived class. You can access them only through interface functions (set and get functions). table of access modes in different types of inheritance:
4_0.png

And now we will implement our classes man and student to see how the inheritance can help you to avoid duplication of your code.
The man implementation is
  1. man::

    man

    (

    string _name, int

    _age, string _sex)
  2. {
  3. name =

    _name;
  4. age =

    _age;
  5. sex =

    _sex;
  6. }
  7. int

    man::

    show_man

    (

    )
  8. {
  9. cout

    <<

    "1. Name "

    <<

    name <<

    endl;
  10. cout

    <<

    "2. Age "

    <<

    age <<

    endl;
  11. cout

    <<

    "3. Sex "

    <<

    sex <<

    endl;
  12. return

    0

    ;
  13. }

it's really simple. The most interesting thing is the implementation of the student class:
  1. student::

    student

    (

    string _name, int

    _age, string _sex,string _university,double

    _mark,string _profession)

    :

    man(

    _name, _age,_sex)
  2. {
  3. university =

    _university;
  4. mark =

    _mark;
  5. profession =

    _profession;
  6. }
  7. int

    student::

    show_student

    (

    )
  8. {
  9. show_man(

    )

    ;
  10. cout

    <<

    "4. From "

    <<

    university<<

    endl;
  11. cout

    <<

    "5. Mark "

    <<

    mark <<

    endl;
  12. cout

    <<

    "6. Profession "

    <<

    profession <<

    endl;
  13. }

The first line is a good example of the use of inheritance. Here
student::

student

(

string _name, int

_age, string _sex,string _university,double

_mark,string _profession)

:

man(

_name, _age,_sex)

I call the constructor of base class from the constructor of the derived class. In the common view you use the next construction:
deriverd-

class-

c-

tor(

param1,param2,...,paramK,..paramn

)

:

base-

class-

c-

tor(

param1,param2,...,paramK)

where parameters from #1 to K are common variables of these 2 classes.
You can use these classes in your program in this way:
  1. int

    main(

    )
  2. {
  3. man man1(

    "Peter"

    ,27

    ,"M"

    )

    ;
  4. cout

    <<

    "Data of man1"

    <<

    endl;
  5. man1.show_man

    (

    )

    ;
  6. student student1(

    "John"

    ,21

    ,"M"

    ,"State University of Berlin"

    ,8.25

    ,"Engineer"

    )

    ;
  7. cout

    <<

    "Data of student1"

    <<

    endl;
  8. student1.show_student

    (

    )

    ;
  9. return

    0

    ;
  10. }

If you want to use a function from base class in the derived class, you can simply call it by it's name:
  1. int

    student::

    show_student

    (

    )
  2. {
  3. show_man(

    )

    ;
  4. //other code
  5. }

Sometimes, the derived and the base class can have the same names of any functions. In this case a conflict between namespaces can appear. For example, We can name the show_man(

)

and show_student

with one name show_info(

)

In this case we need to use ::

operator. It will look like this:
  1. int

    student::

    show_info

    (

    )
  2. {
  3. man::

    show_info

    (

    )

    ;
  4. //other code
  5. }

Another important moment is that a class can be derived not only from one base class.If you need to create a class, that contains variables from a number of other classes, you can do it in the following way:
class

derived_class:

access_specifier1 base_class1,access_specifier2 base_class2,..,access_specifierN base_classN

For example, you have next classes : wheel, engine, carcass. You need to create class car. You can do it in the following way:

class

car :

public

wheel,public

engine,protected

carcass

As a result, the described methods can be used to build a big hierarchy of classes and can be used everywhere.


Download
You must upgrade your account or reply in the thread to view hidden text.
 

452,292

323,341

323,350

Top