1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 188
1

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

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

Author24 — интернет-сервис помощи студентам
Есть базовый класс, от него наследуются несколько классов, свой конструктор я определил в базовом классе. Далее нужно сделать так:
C++
1
parent *p=new child1;
Вызывается непонятно какой конструктор базового класса при создании безымянного объекта производного класса. Т.е. я предполагал сделать как то так
C++
1
parent *p=new child1(a,b,c,d);
Тогда какой выход? Присваивать значения атрибутам уже не через конструктор?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2013, 19:54
Ответы с готовыми решениями:

Использование конструктора базового класса наследником
Доброго дня, коллеги! Решал одну задачку и столкнулся с проблемой. По условию дан класс String,...

Ошибка при динамическом выделении памяти
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR; пишит недопустимый...

Ошибка при динамическом выделении памяти
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой...

Создание исключения при динамическом выделении памяти
Вот код из учебника в нем мне все понятно. #include<iostream> #include<cstdlib> //exit()...

7
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
22.11.2013, 20:00 2
Цитата Сообщение от ivan92 Посмотреть сообщение
непонятно какой конструктор
Всмысле? Вызывается конструктор, который не принимает параметров
C++
1
child1::child1()
И можно целиком глянуть на .h?

Добавлено через 4 минуты
Точнее как... Сперва вызывается конструктор parent, потом child1
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 188
22.11.2013, 20:03  [ТС] 3
MastAKK, это понятно. Еще забыл кое что написать. Можно же для каждого наследника определить свой конструктор, хотя они будут идентичны, так что это тоже не очень хорошо.
Сначала же вызывается конструктор базового класса? Он у меня есть. Вот я бы хотел, чтобы вызывался при создании наследника не конструктор по умолчанию, а конструктор определенный мной. Можно так сделать?
0
120 / 120 / 47
Регистрация: 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;
}
0
36 / 23 / 10
Регистрация: 14.11.2013
Сообщений: 85
22.11.2013, 20:11 5
Цитата Сообщение от ivan92 Посмотреть сообщение
Вот я бы хотел, чтобы вызывался при создании наследника не конструктор по умолчанию, а конструктор определенный мной. Можно так сделать?
Можно. Таким способом вызывается конструктор базового класса из производного:

C++
1
2
3
4
5
child::child(...)
    : base(...)     // <--- Вызов конструктора базового класса
{
 
}
1
1 / 1 / 0
Регистрация: 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;};
};
0
120 / 120 / 47
Регистрация: 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){};
1
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 188
22.11.2013, 21:28  [ТС] 8
LuxArt, scenotaph, спасибо огромное, разобрался)
0
22.11.2013, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2013, 21:28
Помогаю со студенческими работами здесь

Выдаёт ошибку при динамическом выделении памяти
В строчке cout &lt;&lt; &quot;Значение по адресу &quot; &lt;&lt; p &lt;&lt; &quot; равно: &quot; &lt;&lt; *p &lt;&lt; endl; ...

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

Cin.getline() не работает при динамическом выделении памяти
Почему в таком коде cin.getline() работает не так как надо? Если очистить поток, то будет все...

Ошибка при динамическом выделении памяти
Здравствуйте! В программе возникает ошибка при выполнении: отлаживаю:после 9 строчки переходит...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru