Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Наследование С++

Наследование C++

В этом уроке мы узнаем о наследовании в C++ с помощью примеров.

Наследование — одна из ключевых особенностей объектно-ориентированного программирования на C++. Это позволяет нам создать новый класс (производный класс) из существующего класса (базового класса).

Производный класс наследует функции базового класса и может иметь собственные дополнительные функции. Например,

class Animal {
    // eat() function
    // sleep() function
};

class Dog : public Animal {
    // bark() function
};

Здесь Dog класс является производным от Animal учебный класс. С Dog происходит от Animal , члены группы Animal доступны для Dog .

<рисунок>

Обратите внимание на использование ключевого слова public. при наследовании Dog от Animal.

class Dog : public Animal {...};

Мы также можем использовать ключевые слова private и protected вместо public . Мы узнаем о различиях между использованием private , public и protected далее в этом руководстве.

<час>

является отношениями

Наследование — это отношения . Мы используем наследование, только если является отношением. присутствует между двумя классами.

Вот несколько примеров:

<час>

Пример 1:Простой пример наследования C++

// C++ program to demonstrate inheritance

#include <iostream>
using namespace std;

// base class
class Animal {

   public:
    void eat() {
        cout << "I can eat!" << endl;
    }

    void sleep() {
        cout << "I can sleep!" << endl;
    }
};

// derived class
class Dog : public Animal {
 
   public:
    void bark() {
        cout << "I can bark! Woof woof!!" << endl;
    }
};

int main() {
    // Create object of the Dog class
    Dog dog1;

    // Calling members of the base class
    dog1.eat();
    dog1.sleep();

    // Calling member of the derived class
    dog1.bark();

    return 0;
}

Вывод

I can eat!
I can sleep!
I can bark! Woof woof!!

Вот, собака1 (объект производного класса Dog ) может обращаться к членам базового класса Animal . Это потому, что Dog унаследован от Animal .

// Calling members of the Animal class
dog1.eat();
dog1.sleep();
<час>

Защищенные участники C++

Модификатор доступа protected особенно актуален, когда речь идет о наследовании C++.

Нравится private участники, protected члены недоступны вне класса. Однако к ним могут обращаться производные классы. и классы/функции друзей .

Нам нужно protected члены, если мы хотим скрыть данные класса, но по-прежнему хотим, чтобы эти данные были унаследованы его производными классами.

Чтобы узнать больше о protected, обратитесь к нашему руководству по модификаторам доступа C++.

<час>

Пример 2:защищенные члены C++

// C++ program to demonstrate protected members

#include <iostream>
#include <string>
using namespace std;

// base class
class Animal {

   private:
    string color;

   protected:
    string type;

   public:
    void eat() {
        cout << "I can eat!" << endl;
    }

    void sleep() {
        cout << "I can sleep!" << endl;
    }

    void setColor(string clr) {
        color = clr;
    }

    string getColor() {
        return color;
    }
};

// derived class
class Dog : public Animal {

   public:
    void setType(string tp) {
        type = tp;
    }

    void displayInfo(string c) {
        cout << "I am a " << type << endl;
        cout << "My color is " << c << endl;
    }

    void bark() {
        cout << "I can bark! Woof woof!!" << endl;
    }
};

int main() {
    // Create object of the Dog class
    Dog dog1;

    // Calling members of the base class
    dog1.eat();
    dog1.sleep();
    dog1.setColor("black");

    // Calling member of the derived class
    dog1.bark();
    dog1.setType("mammal");

    // Using getColor() of dog1 as argument
    // getColor() returns string data
    dog1.displayInfo(dog1.getColor());

    return 0;
}

Вывод

I can eat!
I can sleep!
I can bark! Woof woof!!
I am a mammal
My color is black

Здесь переменная type protected и, таким образом, доступен из производного класса Dog . Мы можем видеть это, поскольку мы инициализировали type. в Dog класс с помощью функции setType() .

С другой стороны, private переменная цвет не может быть инициализирован в Dog .

class Dog : public Animal {

    public:
      void setColor(string clr) {
          // Error: member "Animal::color" is inaccessible
          color = clr; 
      }
};

Кроме того, поскольку protected ключевое слово скрывает данные, мы не можем получить доступ к type непосредственно из объекта Dog или Animal класс.

// Error: member "Animal::type" is inaccessible
dog1.type = "mammal";
<час>

Режимы доступа в наследовании C++

В наших предыдущих руководствах мы узнали о спецификаторах доступа C++, таких как public, private и protected.

До сих пор мы использовали public ключевое слово, чтобы наследовать класс от ранее существовавшего базового класса. Однако мы также можем использовать private и protected ключевые слова для наследования классов. Например,

class Animal {
    // code
};

class Dog : private Animal {
    // code
};
class Cat : protected Animal {
    // code
};

Различные способы получения классов известны как режимы доступа. . Эти режимы доступа имеют следующий эффект:

  1. общедоступно: Если производный класс объявлен в public режиме, то члены базового класса наследуются производным классом так же, как они есть.
  2. частное: В этом случае все члены базового класса становятся private членов производного класса.
  3. защищено: public члены базового класса становятся protected членов производного класса.

private члены базового класса всегда private в производном классе.

Чтобы узнать больше, посетите наш учебник по общедоступному, частному и защищенному наследованию C++.

<час>

Переопределение функции-члена при наследовании

Предположим, что базовый класс и производный класс имеют функции-члены с одинаковыми именами и аргументами.

Если мы создадим объект производного класса и попытаемся получить доступ к этой функции-члену, вместо функции в базовом классе будет вызвана функция-член в производном классе.

Функция-член производного класса переопределяет функцию-член базового класса.

Узнайте больше о переопределении функций в C++.

<час>

Рекомендуемое чтение: Множественное наследование C++


Язык C

  1. C# статическое ключевое слово
  2. Вложенный класс С#
  3. Операторы С++
  4. Классы и объекты С++
  5. Публичное, защищенное и частное наследование C++
  6. Шаблоны классов С++
  7. Наследование Питона
  8. Классы хранения в C++
  9. Полиморфизм в С++
  10. Абстракция данных в C++