Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
#1

механизм наследования - C++

04.07.2016, 10:55. Просмотров 188. Ответов 6
Метки нет (Все метки)

Есть такой код:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
 
class base {
protected:
  int i, j; // private to base, but accessible to 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 may access base's i and j
  void setk() { k = i*j; }
 
  void showk() { cout << k << "\n"; }
};
 
int main()
{
  derived object1;
 
  object1.set(2, 3); // OK, known to derived
  object1.show();    // OK, known to derived
 
  object1.setk();
  object1.showk();
 
  return 0;
}
Я его надыбал в книжке Шилдта С++ Базовый курс

Не по теме:

(Кстати, как вы считаете хорошая книжка?)


Вопрос у меня такой. Вот мы создаем объект класса derived, а потом вызываем функцию set через этот объект. В функции set два аргумента, кристально понятно, почему эта функция есть в base, там как раз два private члена и эта функция их инициализирует, а вот, что происходит, когда эта функция вызывается через derived, в нем ведь только один класса, а инициализация происходит двух каких-то переменных. В чем тут дело?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2016, 10:55     механизм наследования
Посмотрите здесь:

Наследования - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class student { protected: int sem; string name; float...

наследования - C++
Приведите пожалуйста пару примеров наследования.

Наследования - C++
Что именно наследует класс-потомок при наследовании? А что не наследует? Чем отличаются private, public и protected наследование?

Особенности наследования - C++
Я не понимаю ProperFraction f1(1,2) вызывается цепочка ProperFraction(int n, int d){ FloatFraction(){ ...

Организация наследования - C++
Здраствуйте! У меня есть несколько классов: class Base { public: int baseGet() { return i; } void...

Класс наследования - C++
ак єто можно сделать Класс одиночного наследования. a) Модифицировать класс динамической структуры данных,содержащей строки (л.р. №2),...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Worf
42 / 42 / 6
Регистрация: 06.02.2014
Сообщений: 227
04.07.2016, 11:13     механизм наследования #2
Класс, который был унаследован от какого-либо другого класса "видит" все, что есть в группе public у родителя, следовательно, вызвав функцию set из дочернего класса будет запись в переменные родителя, как и написано в самой функции.
Здесь нет ничего сверхестесственного.
Это как раз и называется инкапсуляция, которая позволяет защитить переменные от прямой записи и поэтому скрываются в protected, а с помощью функции только записываются
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
04.07.2016, 11:30  [ТС]     механизм наследования #3
Worf, это я понимаю, чисто технически, это так. Вопрос в том, что
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
происходит, когда эта функция вызывается через derived, в нем ведь только один член класса, а инициализация происходит двух каких-то переменных
Worf
42 / 42 / 6
Регистрация: 06.02.2014
Сообщений: 227
04.07.2016, 11:35     механизм наследования #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вопрос, почему мы в SET задаем 2 переменные, хотя в дочернем только 1 переменная? Потому что функция set относится только к родительскому классу и там задает значения переменным. Если вы создадите экземпляр только дочернего класса, то экземпляр родительского тоже создастся, иначе как бы вы выполнили функцию родительского, который не создался бы тоже
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
04.07.2016, 11:42  [ТС]     механизм наследования #5
Worf,
Цитата Сообщение от Worf Посмотреть сообщение
Если вы создадите экземпляр только дочернего класса, то экземпляр родительского тоже создастся
ааа, теперь понятно. То есть, тут как-бы неявно, происходит инициализация переменных i, j объекта класса base?
Worf
42 / 42 / 6
Регистрация: 06.02.2014
Сообщений: 227
04.07.2016, 11:43     механизм наследования #6
Да, конечно, иначе на этапе вызова функции даже ошибка бы вылетала, потому что не к чему было бы обращаться, если бы не было ничего проинициализированл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2016, 11:44     механизм наследования
Еще ссылки по теме:

Спецификаторы наследования - C++
Всем здрасьте, у меня возник такой вопросик. Есть базовый класс - Main. Есть класс, который наследует Main - Object Object наследует...

Виды наследования С++ - C++
Построить класс статистическая выборка числовых величин со свойствами: количество элементов выборки, массив элементов выборки и методами:...

Реализация наследования - C++
Здравствуйте, при решении лабораторной возникла такая проблема: при создании объекта производного класса в конструкторе базового...

Пример наследования - C++
Здравствуйте! Снова требуется пример. На сей раз пример наследования. Ничего подходящего пока найти не могу. Допустим, базовый класс и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Blitzor DDD
13 / 13 / 1
Регистрация: 17.08.2015
Сообщений: 448
04.07.2016, 11:44  [ТС]     механизм наследования #7
Worf, понятно. Спасибо большое!
Yandex
Объявления
04.07.2016, 11:44     механизм наследования
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru