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

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

Войти
Регистрация
Восстановить пароль
 
 
cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
#1

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

17.11.2010, 16:21. Просмотров 610. Ответов 17
Метки нет (Все метки)

Помогите, кому не трудно...
Не работают конструкторы наследования (заккоментил подсказки на них...):
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++
class A { public: A() : a(10) // инициализация a { b = 3; // присвоение b } int a, b; };

Конструкторы С++ - C++
Всем привет, помогите довести программу до ума :) Заранее благодарю откликнувшихся :) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
17.11.2010, 18:36 #2
Каким образом выражена "нерабочесть"? И напиши полностью цель программы, а то имена переменных и классов у тебя совсем неинформативные.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
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
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 20:47  [ТС] #10
volovzi, я не так хорошо знаю язык чтобы понять что значитstd::string =(((
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 20:57  [ТС] #12
как-то всё сложно получается.... из простой передачи 2 массивов выплывает какая-то галематья.... спасибо конечно за помощь, но мне кажется что всё можно передать как-то легче....
понятное дело - критикуешь? делай лучше! но тут я незнаю что ещё сделать (
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
17.11.2010, 21:02 #13
Цитата Сообщение от cripton Посмотреть сообщение
понятное дело - критикуешь?
Вообще-то даже не пробовал, просто отвечал на вопросы.
Не такая уж тут и галематья, в действительности все просто. У вас вон сколько строк кода в первом посте, а тут всего-то строк в 25-30 все сделать можно.
cripton
3 / 2 / 1
Регистрация: 02.03.2010
Сообщений: 16
17.11.2010, 21:04  [ТС] #14
нет, про "критикуешь" - я про себя говорил, в плане того что вы предлагаете решение, а я критикую что должно всё быть легче...
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
17.11.2010, 21:12 #15
Просто вы очевидно не ориентируетесь в этой теме, почитайте какую-нибудь книгу - все сразу прояснится, там не так уж и сложно.

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2010, 21:12
Привет! Вот еще темы с ответами:

Конструкторы - C++
Почему, если класс имеет конструктор с параметрами у него обязательно должен быть конструктор по умолчанию?

Конструкторы - C++
У меня есть два конструктора: первый по умолчанию Circle() //Конструктор по умолчанию (инициализирует переменные) { itsRadius =...

конструкторы - C++
Доброе время суток! Помогите разобраться с конструктором. Что это такое и с чем его едят. Так как сдала лабу преподавателю, ну вроде ж...

Конструкторы - C++
Есть фрагмент кода: #include &lt;iostream&gt; using namespace std; class Counter { public: Counter operator++(int);...


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

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

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