Наследование значений С++

70
01 ноября 2021, 05:30

Я не совсем понимаю как работает наследование.

class A {
 protected:
  int num1;
 public:
  A(int num1) {
   this->num1=num1;
  }
};
class B : public A {
 protected:
  int num2;
 public:
  B(int num2) {
   this->num2=num2;
  } 
};
int main() {
 A a(5);
 B b(4);
return 0;
}

В объекте b есть переменная num1. Она пустая или нет? Поля наследуются, а значения в этия полях? Есть ли способ унаследовать значение num1 объекта a в b?

Answer 1

Для начала ваш код не скомпилируется - потому что у вас нет конструктора по умолчанию A. Так что вы просто вынуждены написать что-то типа

B(int num2):A(0) {
    this->num2;   // Что за бред?
} 

или

B(int num1, int num2):A(num1) {
    this->num2;   // Что за бред?
} 

и тем самым инициализировать обе переменные...

Кстати, правильнее записать:

B(int num1, int num2):A(num1),num2(num2) {}

Конструктор наследника всегда вызывает конструктор родителя, даже если вы его не указываете явно (в этом случае вызывается конструктор по умолчанию), что и является, как мне кажется, ответом на ваш вопрос...

Ну, а обратиться к num1 в классе B вполне можно - раз уж вы объявили ее protected. Но только внутри класса - т.е. внутри функций класса B. Просто как к num1 (ну, или this->num1 при необходимости).

Answer 2

Наследование только копирует структуру данных базового класса. Если вы хотите взять значения из другого объекта, то передавайте ссылку откуда. И чтобы копировать эти данные нужно добавить конструктор копирования.

class A {
 protected:
  int num1;
 public:
  A(int num1) {
   this->num1=num1;  }
  A(A const & a):num1(a.num1){}
};
class B : public A {
 protected:
  int num2;
 public:
  B(A const & a , int num2):A(a) {
   this->num2=num2;  }
};
int main() {
 A a(5);
 B b(a,4);
return 0;
}
READ ALSO
c++ algorithm что то пошло не так

c++ algorithm что то пошло не так

написал вроде все правильно, но не работает

105
Как в Web Socket передать сообщение с custom name

Как в Web Socket передать сообщение с custom name

Подскажите пожалуйстаУ меня есть серверная и клиентская часть написанная на Web Socket

124
Render inside foreach

Render inside foreach

Изучаю JS + RN и пишу приложение с навигациейХочу отрендерить компонент в зависимости от переданных в него пропсов

78
Как реализовать переход по страницам сайта без обрывания музыки? (Как у Vk)

Как реализовать переход по страницам сайта без обрывания музыки? (Как у Vk)

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

135