ob.set(1, 2); // Ошибка, доступа к функции set() нет.
ob.show(); // Ошибка, доступа к функции show() нет.
return 0;
}
Важно запомнить, что в случае, если базовый класс наследуется как
Член класса может быть объявлен не только открытым (
Если член класса объявлен с использованием спецификатора
Как вы знаете, закрытый член базового класса не доступен никаким другим частям программы, включая и производные классы. Однако с защищенными членами все обстоит иначе. Если базовый класс наследуется как
Рассмотрим следующий пример программы.
#include
using namespace std;
class base {
protected:
int i, j; // Эти члены закрыты в классе base, но доступны для класса 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 имеет доступ к членам класса base i и j.
void setk() { k = i*j; }
void showk() { cout << k << "\n"; }
};
int main()
{
derived ob;
ob.set(2, 3); // OK, классу derived это позволено.
ob.show(); // OK, классу derived это позволено.
ob.setk();
ob.showk();
return 0;
}
Поскольку класс
Узелок на память.
Если некоторый производный класс используется в качестве базового для другого производного класса, то любой защищенный член исходного базового класса, который наследуется (открытым способом) первым производным классом, может быть унаследован еще раз (в качестве защищенного члена) вторым производным классом. Например, в следующей (вполне корректной) программе класс
#include
using namespace std;
class base {
protected:
int i, j;
public:
void set(int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; }
};
// Члены i и j наследуются как protected-члены.
class derived1: public base {
int k;
public:
void setk() { к = i*j; } // правомерный доступ