• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Наследование классов

  • Автор темы olimp72
  • Дата начала
O

olimp72

Здравствуйте.
Помогите пожалуйста решить проблему по наследованию классов.

Есть базовый класс
class parent
{
protected:
int x;
public:
void Fill() { x = 5; }
void Show() { cout<<x<<endl;}
};
Класс-потомок
class child : public parent
{
public:
void Show_ () { cout<<x<<endl;}
};

parent parent1;
child child1;
int main()
{
parent1.Fill();
parent1. Show(); // Выводит 5
child1. Show_(); // Выводит 0. Почему так?
return 0;
}
Спасибо.
 
V

vol4ek88

Наследование в C++:
class A{ //базовый класс
};

class B : public A{ //public наследование
}

class C : protected A{ //protected наследование
}

class Z : private A{ //private наследование
}

В C++ существует три типа наследования: public, protected, private. Спецификаторы доступа членов базового класса меняются в потомках следующим образом:



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

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

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

vol4ek88

пример наследования

#include <stdio.h>
#include <string.h>

class A
{
public:
void f1 ()
{ printf("class A, f1");

};
};

class B:A
{
public:
int a;
B () { printf ("Constructor!\n");
a = 10;
};


void f1 ()
{
printf("class B, f1, %d", a);
};
};

void main(int argc, char * argv[])
{
A a;
B b;
B* b1;
b1=&b;
b1->f1();
a.f1();
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!