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

Не работают конструкторы.... - C++

Войти
Регистрация
Восстановить пароль
 
cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 16:21     Не работают конструкторы.... #1
Помогите, кому не трудно...
Не работают конструкторы наследования (заккоментил подсказки на них...):
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include <stdio.h>
 
class basecl
{
   public:
   char *a; int n, *x;
   basecl()
   {
     n=1;
      x=new int[1];
      *x=111;
      a=new char[n*10];
      strcpy(a,"constructor");
   }
   basecl(int , int *, char *); //прототип неработающего конструктора
   basecl(int e);
   basecl(const basecl &);
   basecl vvod();
   basecl vivod();
   ~basecl(){ delete[] x;};
};
 
[B]basecl::basecl(int n, int *x, char *a)  //неработающий конструктор
{
    basecl::n = n;
    basecl::x = x;
    strcpy(basecl::a, a);
    cout << "basecl to ";
}[/B]
 
basecl::basecl(const basecl & t)
{
   int i;
   n=t.n;
   a=new char[n*10];
   for (i=0;i<n;i++)
   strcpy(a+i*10,t.a+i*10);
   x=new int[n];
   for (i=0;i<n;i++)
   x[i]=i+n;
   cout << "basecl const ";
}
 
basecl::basecl(int e)     
{
   int i;
   n=e;
   x=new int[n];
   a=new char[n*10];
   for (i=0; i<n; i++)
      {x[i]=i+1; strcpy((a+i*10), "nomer");}
}
 
basecl basecl::vvod()
{
    int i;
   cout << "Kol-vo naimenovaniy: ";
   cin >> n;
   a=new char[n*10];
   x=new int[n];
   for(i=0;i<n;i++)
    {
        cout << (i+1) << ". ";
        gets(a+i*10);
        cout <<" Plotnostb: ";
        cin >> x[i];
    }
      return 0;
}
 
basecl basecl::vivod()
{
   int i;
   cout << endl;
   for(i=0;i<n;i++)
   cout << (i+1) << ". " << (a+i*10) << " - " << x[i] << endl;
   return 0;
}
 
class alcohol : public basecl
{
   public: int *y:
   alcohol(const alcohol &);
    alcohol()
   {
      y=new int[n];
      *y=10;
   };
   alcohol(int e);
   alcohol(int, int *, char *, int *); //прототип неработающего конструктора
   alcohol vvod();
   alcohol vivod();
   ~alcohol(){ delete[] y;};
};
 
alcohol::alcohol(int n, int *x, char *a, int *y) : basecl(n, x, a) //неработающий конструктор
{
    alcohol::y=y;
           cout << "alcohol to ";
}
 
alcohol::alcohol(const alcohol & t)
{
   int i;
   n=t.n;
   y=new int[n];
   basecl::x=new int[n];
   basecl::a=new char[n*10];
   for (i=0;i<n;i++)
     {y[i]=i+1; x[i]=i+1; strcpy((basecl::a+i*10), "nomer");}
}
 
alcohol::alcohol(int e)     
{
   int i;
   n=e;
   y=new int[n];
   basecl::x=new int[n];
   basecl::a=new char[n*10];
   for (i=0; i<n; i++)
      {y[i]=i+1; x[i]=i+1; strcpy((basecl::a+i*10), "nomer");}
}
 
alcohol alcohol::vvod()
{
   int i;
   cout << endl << "Vvedite krepostb: " << endl;
   y=new int[n];
   for(i=0;i<n;i++)
    {
         cout << (i+1) << ". "<<(a+i*10);
         cout <<", Plotnostb: " << x[i]<< ", krepostb: ";
         cin >> y[i];
    }
      return 0;
}
 
alcohol alcohol::vivod()
{
   int i;
   for(i=0;i<n;i++)
   cout << (i+1) << ". " << (a+i*10) <<", Plotnostb: " << basecl::x[i]<< ", krepostb: "<< y[i] << endl;
   return 0;
}
 
 
main()
{
   int i;
   basecl c;
   alcohol b;
   c.vvod();
   c.vivod();
   b.vvod();
   b.vivod();
   cin>>i;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2010, 16:21     Не работают конструкторы....
Посмотрите здесь:

Конструкторы C++
Конструкторы C++
C++ ооп. конструкторы.
Объявить конструкторы C++
C++ конструкторы
Конструкторы C++
Конструкторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
17.11.2010, 18:36     Не работают конструкторы.... #2
Каким образом выражена "нерабочесть"? И напиши полностью цель программы, а то имена переменных и классов у тебя совсем неинформативные.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.11.2010, 19:03     Не работают конструкторы.... #3
А вот так:
C++
1
2
3
4
5
6
7
8
basecl::basecl(int N, int *X, char *A)  //неработающий конструктор
{
        n = N;
        x = X;
        a=new char[strlen(A)+1];
        strcpy(a, A);
        cout << "basecl to ";
}
Добавлено через 2 минуты
еще интересно посмотреть, как эти конструкторы вызываюся?
cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 19:44  [ТС]     Не работают конструкторы.... #4
Задача - Создать базовый класс имеющий указатели на название жидкости(char *) и её плотность(int *x). Создать public - производный класс (спиртные напитки) имеющий указатель на крепость(int *y).
Список должен состоять из (int n) элементов...

Kastaneda, Как они должны вызываться я не имею понятия.... =( брал из этого примера:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream.h> 
#include <string.h> 
 
class employee 
 
{ 
public: 
   employee(char *, char *, float);
   void show_employee(void); 
private: 
   char name [ 64 ]; 
   char position[64]; 
   float salary; 
}; 
 
employee::employee(char *name, char *position,float salary) 
 
{ 
   strcpy(employee::name, name); 
   strcpy(employee::position, position); 
   employee::salary = salary;
   cout << "sdfsdfsdfsdfSDFSD";
} 
 
void employee::show_employee(void) 
 
{ 
   cout << "name: " << name << endl;
   cout << "dolj: " << position << endl;
   cout << "$" << salary << endl;
} 
 
class manager : public employee
 
{ 
public: 
   manager(char *, char *, char *, float, float, int);
   void show_manager(void); 
private: 
   float annual_bonus;
   char company_car[64];
   int stock_options; 
};
 
manager::manager(char *name, char *position, char *company_car, float salary, float bonus, int stock_options) : employee(name, position, salary)
 
{ 
   strcpy(manager::company_car, company_car) ; 
   manager::annual_bonus = bonus ; 
   manager::stock_options = stock_options;
} 
 
void manager::show_manager(void) 
 
{ 
   show_employee(); 
   cout << "CAR: " << company_car << endl;
   cout << "Premia" << annual_bonus << endl;
   cout << "fond: " << stock_options << endl;
} 
 
void main(void) 
 
{
int i;
   employee worker("DJON", "Prgr", 35000);
   manager boss("DJONNI", "PRESID ", "Lexus", 50000.0, 5000, 1000);
   worker.show_employee() ;
   boss.show_manager();
   cin >> i;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.11.2010, 20:08     Не работают конструкторы.... #5
Kastaneda, Как они должны вызываться я не имею понятия...
А как вы определили, что они не работают? Вот же пример вызова конструктора с параметрами:
C++
1
manager boss("DJONNI", "PRESID ", "Lexus", 50000.0, 5000, 1000);
Добавлено через 4 минуты
производный класс (спиртные напитки) имеющий указатель на крепость(int *y).
тогда так:
C++
1
2
3
4
5
6
alcohol::alcohol(int n, int *x, char *a, int Y) : basecl(n, x, a) //неработающий конструктор
{
        y=new int;
        *y=Y;
           cout << "alcohol to ";
}
cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 20:13  [ТС]     Не работают конструкторы.... #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
А как вы определили, что они не работают?
Понимаете, как я понимаю конструкторы срабатывают автоматически при запуске, ну наверное кроме конструктора без параметров....
конструктор с параметрами выполняется при использовании....
как использовать и вызывать эти 2 конструкторая я не могу "допереть... "

так как там указан запуск
C++
1
manager boss("DJONNI", "PRESID ", "Lexus", 50000.0, 5000, 1000);
мне не подходит, так как у меня-то идёт ввод с клавиатуры всех данных....
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.11.2010, 20:24     Не работают конструкторы.... #7
Понимаете, как я понимаю конструкторы срабатывают автоматически при запуске, ну наверное кроме конструктора без параметров....
конструктор с параметрами выполняется при использовании....
Не понял, что вы имели ввиду, но похоже не правильно))
мне не подходит, так как у меня-то идёт ввод с клавиатуры всех данных...
Например есть условие задания:
Создать базовый класс имеющий указатели на название жидкости(char *) и её плотность(int *x).
Тогда код будет такой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class liquid{
   char* name;
   int* density;
public:
   liquid(char* N,int D){
      name=new char[strlen(N)+1];
      strcpy(name,N);
      density=new int;
      *density=D;
   }
};
int main(){
char name[80];
int density;
cout<<"Enter name:";
cin>>name;
cout<<"Enter density: ";
cin>>density;
liquid L(name,liquid);//вызываем конструктор с параметрами
cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 20:35  [ТС]     Не работают конструкторы.... #8
как я понимаю из вашего примера массивов там не будет, просто 1 раз ввели данные и всё....
как реализовать так чтобы был массив, чтобы они были векторами?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class liquid{
   char* name;
   int* density;
public:
   liquid(char* N,int D)
{
      name=new char[(strlen(N)+1)*10];
      strcpy(name,N);
      density=new int[n];
      *density=D;
}
};
int main(){
char name[80];
int density, n, i;
cin >> n;
for(i=0;i<n;i++){
cout<<"Enter name:";
gets(name+i*10);
cout<<"Enter density: ";
cin>>density[i];}
liquid L(name,liquid);//вызываем конструктор с параметрами
так получается?
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
17.11.2010, 20:45     Не работают конструкторы.... #9
cripton, а зачем указатели? Для строки — std::string, а для плотности просто double.
cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 20:47  [ТС]     Не работают конструкторы.... #10
volovzi, я не так хорошо знаю язык чтобы понять что значитstd::string =(((
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.11.2010, 20:53     Не работают конструкторы.... #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(){
char name[80];
int density, n;
cin >> n;
liquid array[n];//чтоб так делать, должен быть объявлен конструктор без параметров
while(n){
cout<<"Enter name:";
cin>>name;
cout<<"Enter density: ";
cin>>density;
array[n].setval(name,density);//должна быть ф-ция, которая задает значения членов
--n;
}
Чтоб вместо ф-ции каждый раз вызывать конструктор с параметрами, можно сначала объявить массив указателей на liquid, ну и потом в цикле динамически выделять память для очередного указателя и потом вызывать конструктор с параметрами.

Добавлено через 3 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
потом в цикле динамически выделять память для очередного указателя и потом вызывать конструктор с параметрами
Ээ, если я не ошибаюсь, но вроде там не вызывается конструктор по умолчанию.
cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 20:57  [ТС]     Не работают конструкторы.... #12
как-то всё сложно получается.... из простой передачи 2 массивов выплывает какая-то галематья.... спасибо конечно за помощь, но мне кажется что всё можно передать как-то легче....
понятное дело - критикуешь? делай лучше! но тут я незнаю что ещё сделать (
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.11.2010, 21:02     Не работают конструкторы.... #13
Цитата Сообщение от cripton Посмотреть сообщение
понятное дело - критикуешь?
Вообще-то даже не пробовал, просто отвечал на вопросы.
Не такая уж тут и галематья, в действительности все просто. У вас вон сколько строк кода в первом посте, а тут всего-то строк в 25-30 все сделать можно.
cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 21:04  [ТС]     Не работают конструкторы.... #14
нет, про "критикуешь" - я про себя говорил, в плане того что вы предлагаете решение, а я критикую что должно всё быть легче...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
17.11.2010, 21:12     Не работают конструкторы.... #15
Просто вы очевидно не ориентируетесь в этой теме, почитайте какую-нибудь книгу - все сразу прояснится, там не так уж и сложно.

Не по теме:

Цитата Сообщение от cripton Посмотреть сообщение
нет, про "критикуешь" - я про себя говорил, в плане того что вы предлагаете решение, а я критикую что должно всё быть легче...
А, я чего-то не понял сразу.

cripton
 Аватар для cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 21:16  [ТС]     Не работают конструкторы.... #16
у меня сейчас практика идёт, преподша из-за принципа не говорит что и как надо делать, я с таким первый раз сталвиваюсь, то что есть в книгах за тысячу девятьсот лохматый - это просто ужас.... ничего полезного....
вот я и тыкаю пальцем в небо....(((
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
18.11.2010, 01:16     Не работают конструкторы.... #17
cripton, вот тебе пример, как это можно сделать.
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
#include <iostream>
#include <string>
 
class liquid {
public:
    liquid () : m_name(""), m_density(0) {}
    liquid (const std::string & name, double density) : m_name(name), m_density(density) {}
    
    const std::string & name () const { return m_name; }
    double density () const { return m_density; }
 
private:
    std::string m_name;
    double m_density;
};
 
class alcohol : public liquid {
public:
    alcohol () : liquid(), m_percent(0) {}
    alcohol (const std::string & name, double density, double percent) : liquid(name, density), m_percent(percent) {}
    
    double percent () const { return m_percent; }
 
private:
    double m_percent;
};
 
int main (int argc, char * const argv[]) {
    std::string name;
    double density;
    double percent;
    
    std::cout << "Введите название напитка, его плотность и крепость: ";
    
    std::cin >> name >> density >> percent;
    
    alcohol drink(name, density, percent);
    
    std::cout << drink.name() << ": плотность — " << drink.density() << "кг/м^3, крепость — " << drink.percent() << "%." << std::endl;
 
    return 0;
}
Дальше уже сам расширяй.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2010, 13:15     Не работают конструкторы....
Еще ссылки по теме:

C++ Конструкторы и деструктор
C++ Конструкторы C++
C++ Конструкторы С++
C++ Конструкторы
Конструкторы C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
18.11.2010, 13:15     Не работают конструкторы....
  #18

Не по теме:

Цитата Сообщение от cripton Посмотреть сообщение
то что есть в книгах за тысячу девятьсот лохматый - это просто ужас.... ничего полезного....
Далеко не факт, например "Искусство программирования" Кнута (1-ый том вышел в 1968г.) до сих пор считается авторитетной книгой вне конкуренции, да и еще - в XXI веке книги тоже выпускают:)

Yandex
Объявления
18.11.2010, 13:15     Не работают конструкторы....
Ответ Создать тему
Опции темы

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