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

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

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

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

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

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

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

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

Ошибка при динамическом выделении памяти - C++
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой веб-страницы: http://cppstudio.com/post/9555/...

Создание исключения при динамическом выделении памяти - C++
Вот код из учебника в нем мне все понятно. #include<iostream> #include<cstdlib> //exit() #include<new> using std::cout;using...

Выравнивание при динамическом выделении памяти под массив - C++
Добрый вечер. Для того, чтобы выделить память под массив динамически и выровнять указатель по 16 байтам, в разных ОС существуют разные...

Cin.getline() не работает при динамическом выделении памяти - C++
Почему в таком коде cin.getline() работает не так как надо? Если очистить поток, то будет все нормально. #include <iostream> using...

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

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

C++
1
2
3
4
5
child::child(...)
    : base(...)     // <--- Вызов конструктора базового класса
{
 
}
1
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;};
};
0
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){};
1
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
22.11.2013, 21:28  [ТС] #8
LuxArt, scenotaph, спасибо огромное, разобрался)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 21:28
Привет! Вот еще темы с ответами:

Ошибка на динамическом выделении памяти - C++
программа ниже безупречно выполнялась под С++Builder 6.0 (консольное приложение). При переводе ее в VC6.0 (кроме сделанных исправлений -...

Вопрос о динамическом выделении памяти - C++
Доброго времени суток всем. у меня вопрос к работе следующего кода: delete values; // Удаляем массив из кучи ...

Немного о динамическом выделении памяти ... - C++
объявление данных в классе: class Employee {.......... private: char *firstName; char *lasrName; }

Вопрос о динамическом выделении памяти для строки - C++
Как можно реализовать динамическое выделение для строки, т.е. например у меян есть указатель - char *c. Мне необходимо ввести строку с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.11.2013, 21:28
Ответ Создать тему
Опции темы

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