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

Переопределение функции C++

Переопределение функций C++

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

Как мы знаем, наследование — это функция ООП, которая позволяет нам создавать производные классы из базового класса. Производные классы наследуют функции базового класса.

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

Это называется переопределением функции. в С++. Функция производного класса переопределяет функцию базового класса.

<час>

Пример 1. Переопределение функции C++

// C++ program to demonstrate function overriding

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
    }
};

int main() {
    Derived derived1;
    derived1.print();
    return 0;
}

Вывод

Derived Function

Здесь та же функция print() определяется как в Base и Derived классы.

Итак, когда мы вызываем print() из Derived объект производный1 , print() из Derived выполняется путем переопределения функции в Base .

<рисунок>

Как мы видим, функция была переопределена, потому что мы вызывали функцию из объекта Derived класс.

Если бы мы вызвали print() функция из объекта Base класс, функция не была бы переопределена.

// Call function of Base class
Base base1;
base1.print(); // Output: Base Function
<час>

Доступ к переопределенной функции в C++

Чтобы получить доступ к переопределенной функции базового класса, мы используем оператор разрешения области видимости :: .

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

Пример 2. Доступ переопределенной функции C++ к базовому классу

// C++ program to access overridden function
// in main() using the scope resolution operator ::

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
    }
};

int main() {
    Derived derived1, derived2;
    derived1.print();

    // access print() function of the Base class
    derived2.Base::print();

    return 0;
}

Вывод

Derived Function
Base Function

Вот это утверждение

derived2.Base::print();

обращается к print() функция базового класса.

<рисунок> <час>

Пример 3. Вызов переопределенной функции C++ из производного класса

// C++ program to call the overridden function
// from a member function of the derived class

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;

        // call overridden function
        Base::print();
    }
};

int main() {
    Derived derived1;
    derived1.print();
    return 0;
}

Вывод

Derived Function
Base Function

В этой программе мы вызвали переопределенную функцию внутри Derived сам класс.

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
        Base::print();
    }
};

Обратите внимание на код Base::print(); , который вызывает переопределенную функцию внутри Derived класс.

<рисунок> <час>

Пример 4. Вызов переопределенной функции C++ с использованием указателя

// C++ program to access overridden function using pointer
// of Base type that points to an object of Derived class

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
    }
};

int main() {
    Derived derived1;

    // pointer of Base type that points to derived1
    Base* ptr = &derived1;

    // call function of Base class using ptr
    ptr->print();

    return 0;
}

Вывод

Base Function

В этой программе мы создали указатель Base тип с именем ptr . Этот указатель указывает на Derived объект производный1 .

// pointer of Base type that points to derived1
Base* ptr = &derived1;

Когда мы вызываем print() функция с использованием ptr , он вызывает переопределенную функцию из Base .

// call function of Base class using ptr
ptr->print();

Это потому, что хотя ptr указывает на Derived объект, на самом деле это Base тип. Итак, он вызывает функцию-член Base .

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


Язык C

  1. Операторы С++
  2. С++ Комментарии
  3. Передача массива в функцию в программировании на C++
  4. Функции C++ с примерами программ
  5. С - Функции
  6. Обзор С++
  7. Константы/литералы С++
  8. Операторы в С++
  9. Числа в С++
  10. Перегрузка C++ (оператор и функция)