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

Публичное, защищенное и частное наследование C++

Общедоступное, защищенное и частное наследование C++

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

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

class Base {
.... ... ....
};

class Derived : public Base {
.... ... ....
};

Обратите внимание на ключевое слово public. в коде

class Derived : public Base

Это означает, что мы создали производный класс от базового класса в общедоступном режиме. . В качестве альтернативы мы также можем получить классы из защищенных или частное режимы.

Эти 3 ключевых слова (public , protected и private ) известны как спецификаторы доступа. в наследовании C++.

<час>

открытое, защищенное и закрытое наследование в C++

общедоступно , защищено и частное наследование имеет следующие особенности:

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

class Base {
    public:
        int x;
    protected:
        int y;
    private:
        int z;
};

class PublicDerived: public Base {
    // x is public
    // y is protected
    // z is not accessible from PublicDerived
};

class ProtectedDerived: protected Base {
    // x is protected
    // y is protected
    // z is not accessible from ProtectedDerived
};

class PrivateDerived: private Base {
    // x is private
    // y is private
    // z is not accessible from PrivateDerived
}
<час>

Пример 1:общедоступное наследование C++

// C++ program to demonstrate the working of public inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class PublicDerived : public Base {
   public:
    // function to access protected member from Base
    int getProt() {
        return prot;
    }
};

int main() {
    PublicDerived object1;
    cout << "Private = " << object1.getPVT() << endl;
    cout << "Protected = " << object1.getProt() << endl;
    cout << "Public = " << object1.pub << endl;
    return 0;
}

Вывод

Private = 1
Protected = 2
Public = 3

Здесь мы получили PublicDerived из Base в общедоступном режиме .

В результате в PublicDerived :

Поскольку частное и защищено члены недоступны из main() , нам нужно создать публичные функции getPVT() и getProt() чтобы получить к ним доступ:

// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;

// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;

Обратите внимание, что getPVT() функция была определена внутри Base . Но getProt() функция была определена внутри PublicDerived .

Это потому, что pvt , который является личным в Base , недоступен для PublicDerived .

Однако защита доступен для PublicDerived из-за публичного наследования. Итак, getProt() может получить доступ к защищенной переменной из PublicDerived .

<час>

Доступность в публичном наследовании

Специальные возможности частные участники защищенные участники общедоступные члены
Базовый класс Да Да Да
Производный класс Нет Да Да
<час>

Пример 2:защищенное наследование C++

// C++ program to demonstrate the working of protected inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class ProtectedDerived : protected Base {
   public:
    // function to access protected member from Base
    int getProt() {
        return prot;
    }

    // function to access public member from Base
    int getPub() {
        return pub;
    }
};

int main() {
    ProtectedDerived object1;
    cout << "Private cannot be accessed." << endl;
    cout << "Protected = " << object1.getProt() << endl;
    cout << "Public = " << object1.getPub() << endl;
    return 0;
}

Вывод

Private cannot be accessed.
Protected = 2
Public = 3

Здесь мы получили ProtectedDerived из Base в защищенном режиме .

В результате в ProtectedDerived :

Как известно, защищено доступ к участникам невозможен напрямую извне класса. В результате мы не можем использовать getPVT() из ProtectedDerived .

Вот почему нам нужно создать getPub() функция в ProtectedDerived чтобы получить доступ к пабу переменная.

// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;
<час>

Доступность в защищенном наследовании

Специальные возможности частные участники защищенные участники общедоступные члены
Базовый класс Да Да Да
Производный класс Нет Да Да (наследуется как защищенные переменные)
<час>

Пример 3:частное наследование C++

// C++ program to demonstrate the working of private inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class PrivateDerived : private Base {
   public:
    // function to access protected member from Base
    int getProt() {
        return prot;
    }

    // function to access private member
    int getPub() {
        return pub;
    }
};

int main() {
    PrivateDerived object1;
    cout << "Private cannot be accessed." << endl;
    cout << "Protected = " << object1.getProt() << endl;
    cout << "Public = " << object1.getPub() << endl;
    return 0;
}

Вывод

Private cannot be accessed.
Protected = 2
Public = 3

Здесь мы получили PrivateDerived из Base в приватном режиме .

В результате в PrivateDerived :

Как мы знаем, закрытые члены не могут быть доступны напрямую извне класса. В результате мы не можем использовать getPVT() из PrivateDerived .

Именно поэтому нам нужно создать getPub() функция в PrivateDerived чтобы получить доступ к пабу переменная.

// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;
<час>

Доступность в частном наследовании

Специальные возможности частные участники защищенные участники общедоступные члены
Базовый класс Да Да Да
Производный класс Нет Да (наследуется как частные переменные) Да (наследуется как частные переменные)

Язык C

  1. Общедоступное облако против частного облака против гибридного облака
  2. Преимущества и недостатки общедоступного облака
  3. Преимущества и недостатки частного облака
  4. Переменные C++, литералы и константы
  5. Классы и объекты С++
  6. Управление памятью C++:создание и удаление
  7. Дружественные функции C++ и дружественные классы
  8. Структуры и классы в C ++
  9. Частная сеть строится на основе общедоступной сети Sigfox
  10. Разница между структурой и классом:объяснение на примере C++