Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1

Явное наследование конструкторов

15.08.2012, 23:12. Показов 4819. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если препод требует наследовать констуркторы явно что он имеет ввиду делать это только для дефолтных конструкторов или для не дефолтных тоже надо это делать
и какая должна быть имплементация таких дерайфтных дефолтных конструкторов
пустая ???

или не пустая например

C++
1
2
3
4
5
    Derived::Derived() : Base()
    {
        CentralPoint = Point(0,0); 
        RadiusPoint = Point(0,0) ; 
    }
или должно быть так ???
C++
1
2
3
4
Derived::Derived() : Base()
    {
        
    }
вообще явное наследование не дефолтых констукторов это же ахинея так ? ???

что такое initialization list?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.08.2012, 23:12
Ответы с готовыми решениями:

Наследование конструкторов
Добрый день. Подскажите как правильно осуществить наследование конструктора в двух файлах h и cpp. В одном h файле все работало. ...

Наследование конструкторов?
Сдаю лабораторную на тему наследования в С++ : #include <iostream> using namespace std; class hero { protected: int jiv; ...

Наследование конструкторов
Здравствуйте, мне нужно что бы player наследовал конструктор от aobject class aobject { public: aobject(int xx,int yy,int** mm)...

2
Эксперт по пяченькам
 Аватар для StasGamilton
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
16.08.2012, 03:02
Цитата Сообщение от Leeto Посмотреть сообщение
Если препод требует наследовать констуркторы явно что он имеет ввиду делать это только для дефолтных конструкторов или для не дефолтных тоже надо это делать
и какая должна быть имплементация таких дерайфтных дефолтных конструкторов
пустая ???
Конструктор выполняет необходимые действия для создания объекта класса (заполнение полей и т.д.). Если ты наследуешься от базового класса, у которого в конструкторе есть какие-то действия, то чтобы не переписывать их (если конечно их нужно выполнить), ты вызываешь этот конструктор из конструктора наследуемого класса, и если не все необходимые действия выполняются, то дописываешь их. Так что здесь нужно смотреть на то, что выполняет тот или иной конструктор. Если дефолтный конструктор базового класа выделяет память под динамический массив, который играет важную роль в базовом и наследуемом классе, то нужно бы его вызывать не только из дефолтного конструктора.

пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Base {
  public:
    Base() {
      a = new char[20];
    }
 
   private:
     char* a;
};
 
 
class Child : public Base {
  public:
    Child() : Base() {   // вызов конструктора Base, иначе под массив a не выделиться память
      c = 0;
    }
 
    Child(int _c) : Base() {  // Здесь тоже самое
       c = _c;
    }
  private:
    int c;
}
Добавлено через 8 минут
Цитата Сообщение от Leeto Посмотреть сообщение
вообще явное наследование не дефолтых констукторов это же ахинея так ? ???
Это нормальное являение
C++
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
class Point {
 public:
  Point() {
   x = 0; y = 0;
  }
  Point(int x, int y) {
   this->x = x;
   this->y = y;
  }
 private:
  int x, y; 
};
 
class Circle : public Point {
 public:
  Circle() : Point() {
   range = 0;
  }
  
  Circle(int x, int y, int range) : Point(x, y) {   // Вызывая Point(x,y), мы заполняем x,y для Circle
    this->range = range;
  }
 private:
  int range;
};
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.08.2012, 07:12
Цитата Сообщение от StasGamilton Посмотреть сообщение
Child() : Base() { // вызов конструктора Base, иначе под массив a не выделится память
Выделится. Если в списке инициализаторов (initialization list), конструктора производного класса, явно не вызван конструктор базового класса, то автоматически будет вызван конструктор по умолчанию базового класса. В любом случае, при создании (выделении памяти под) объекта производного класса, программа сначала создаёт (выделяет память под) объект базового класса. И происходит это до того, как программа дойдёт до тела конструктора производного класса, в котором происходит занесение, в уже выделенную память, значений полей объекта производного класса. Для этого используется список инициализаторов элементов. Объект базового класса должен быть создан первым, поэтому, если не вызывать, в списке инициализаторов, конструктор базового класса, то будет вызван конструктор по умолчанию базового класса. Если же не нужен конструктор по умолчанию, а нужен какой-нибудь другой конструктор базового класса, то его следует явно указать в списке инициализаторов.

Добавлено через 10 минут
Цитата Сообщение от Leeto Посмотреть сообщение
Если препод требует наследовать констуркторы явно что он имеет ввиду делать это только для дефолтных конструкторов или для не дефолтных тоже надо это делать
В каждом объекте производного класса, есть объект базового класса. Каким конструктором хотите инициализировать поля этого объекта базового класса, такой конструктор и вызывайте в списке инициализаторов. Если никакой не вызовите, то автоматически будет вызван конструктор по умолчанию базового класса.

Цитата Сообщение от Leeto Посмотреть сообщение
и какая должна быть имплементация таких дерайфтных дефолтных конструкторов
пустая ???
или не пустая например
Не должна. Какая нужна вам. Какую напишите, та и будет.

Добавлено через 16 минут
C++
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
33
34
35
36
37
38
39
40
41
42
class Base 
{
  public:
    Base() 
    {
      x = 0;
      a = 0;
    }
    
    Base(int n) 
    {
      x = n;
      a = new char[20];
    }
    
 private:
     char* a;
     int x;
};
 
 
class Child : public Base 
{
  public:
    Child() : Base() // явный вызов конструктора по умолчанию для объекта Base.
    {   
      c = 0;
    }
 
    Child(int _c)  // Здесь будет неявный вызов конструктора по умолчанию для объекта Base.
    {  
       c = _c;
    }
    
    Child(int a, int _c) : Base(a) // Явный вызов конструктора для объекта Base.
    {  
       c = _c;
    }
 
private:
    int c;
};
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2012, 07:12
Помогаю со студенческими работами здесь

Наследование конструкторов
Здравствуйте! У меня такой вопрос: Как сделать так, чтобы при создании объекта дочернего класса не вызывался конструктор родительского? При...

Наследование конструкторов
если при наследовании классов отсутствует конструктор в базовом классе, то что тогда? Помогите, не могу найти ответ в инете.

Наследование конструкторов
Здрасти. Такая проблема. У меня есть классы с таким наследованием: KIERUNEK-->PRZEDMIOT-->OCENA<--STUDENT Вот конструкторы класса...

Наследование конструкторов
Создать класс CPoint – точка. На его основе создать классы CColoredPoint и CLine. На основе класса СLine создать класс CcoloredLine и класс...

Наследование конструкторов
Вопрос по теории наследования: Есть некоторый базовый класс с двумя конструкторами типа паблик, первый без аргумента, второй с одним...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru