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

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

Войти
Регистрация
Восстановить пароль
 
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
#1

Использование конструктора базового класса при динамическом выделении памяти - C++

22.11.2013, 19:54. Просмотров 455. Ответов 7
Метки нет (Все метки)

Есть базовый класс, от него наследуются несколько классов, свой конструктор я определил в базовом классе. Далее нужно сделать так:
C++
1
parent *p=new child1;
Вызывается непонятно какой конструктор базового класса при создании безымянного объекта производного класса. Т.е. я предполагал сделать как то так
C++
1
parent *p=new child1(a,b,c,d);
Тогда какой выход? Присваивать значения атрибутам уже не через конструктор?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 19:54     Использование конструктора базового класса при динамическом выделении памяти
Посмотрите здесь:

C++ Вопрос о динамическом выделении памяти для строки
C++ Вопрос о динамическом выделении памяти
Вызов конструктора базового класса C++
Немного о динамическом выделении памяти ... C++
C++ Ошибка на динамическом выделении памяти
C++ Ошибка при динамическом выделении памяти
Выравнивание при динамическом выделении памяти под массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
22.11.2013, 20:00     Использование конструктора базового класса при динамическом выделении памяти #2
Цитата Сообщение от ivan92 Посмотреть сообщение
непонятно какой конструктор
Всмысле? Вызывается конструктор, который не принимает параметров
C++
1
child1::child1()
И можно целиком глянуть на .h?

Добавлено через 4 минуты
Точнее как... Сперва вызывается конструктор parent, потом child1
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
22.11.2013, 20:03  [ТС]     Использование конструктора базового класса при динамическом выделении памяти #3
MastAKK, это понятно. Еще забыл кое что написать. Можно же для каждого наследника определить свой конструктор, хотя они будут идентичны, так что это тоже не очень хорошо.
Сначала же вызывается конструктор базового класса? Он у меня есть. Вот я бы хотел, чтобы вызывался при создании наследника не конструктор по умолчанию, а конструктор определенный мной. Можно так сделать?
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 20:10     Использование конструктора базового класса при динамическом выделении памяти #4
ivan92,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A{
protected:
    int a;
public:
    A(int _a) {
        a = _a;
    }
};
class B: public A {
private:
    int b;
public:
    B(int _a, int _b) : A(_a),b(_b) {};
};
 
int main()
{
    B my(2,3);  
    return 0;
}
LuxArt
33 / 20 / 2
Регистрация: 14.11.2013
Сообщений: 85
22.11.2013, 20:11     Использование конструктора базового класса при динамическом выделении памяти #5
Цитата Сообщение от ivan92 Посмотреть сообщение
Вот я бы хотел, чтобы вызывался при создании наследника не конструктор по умолчанию, а конструктор определенный мной. Можно так сделать?
Можно. Таким способом вызывается конструктор базового класса из производного:

C++
1
2
3
4
5
child::child(...)
    : base(...)     // <--- Вызов конструктора базового класса
{
 
}
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
22.11.2013, 21:11  [ТС]     Использование конструктора базового класса при динамическом выделении памяти #6
LuxArt, вот так вот? Visual studio ругается.
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
class client{
protected:
  char name[50];
 
  int bMonth, bDay, bYear,
               eMonth, eDay, eYear;
  int amount, cost;
  int id;
public:
  client::client(int fbMonth, int fbDay, int fbYear, int feMonth, int feDay, int feYear, int fcost, int fid);
  virtual void fAmount()=0;
  void printName(){cout<<name;};
  void printId(){cout<<id;};
  void printAmount(){cout<<amount;};
  void printCost(){cout<<cost;};
  void printPeriod(){cout<<bDay<<'.'<<bMonth<<'.'<<bYear<<'-'<<eDay<<'.'<<eMonth<<'.'<<eYear;};
  void printFromFile();
};
 
 
 
class adult : public client{
public:
  adult():client(int fbMonth, int fbDay, int fbYear, int feMonth, int feDay, int feYear, int fcost, int fid)
  void fAmount(){amount=cost*5;};
};
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
22.11.2013, 21:22     Использование конструктора базового класса при динамическом выделении памяти #7
ivan92,
C++
1
    adult(int fbMonth, int fbDay, int fbYear, int feMonth, int feDay, int feYear, int fcost, int fid):client( fbMonth,  fbDay,  fbYear, feMonth, feDay,feYear,  fcost,  fid){};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 21:28     Использование конструктора базового класса при динамическом выделении памяти
Еще ссылки по теме:

Инициализация конструктора базового класса C++
Создание исключения при динамическом выделении памяти C++
Cin.getline() не работает при динамическом выделении памяти C++
Наследование конструктора из базового класса C++
Ошибка при динамическом выделении памяти C++

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

Или воспользуйтесь поиском по форуму:
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
22.11.2013, 21:28  [ТС]     Использование конструктора базового класса при динамическом выделении памяти #8
LuxArt, scenotaph, спасибо огромное, разобрался)
Yandex
Объявления
22.11.2013, 21:28     Использование конструктора базового класса при динамическом выделении памяти
Ответ Создать тему
Опции темы

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