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

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

Войти
Регистрация
Восстановить пароль
 
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
#1

перегрузка классов - C++

25.07.2011, 12:13. Просмотров 909. Ответов 11
Метки нет (Все метки)

Народ, всем привет!!!
2 дня тому назад писал код в которм необходимо было добавить в базовый и производный классы констуктор с дополнительными параметрами, сделал, компилятор показывает что нет ошибок, что все работает, нажимаю на исполнение и тормоз, вылазит сообщение и виснет, показывает, что там загруз все .
Народ, пожалуйста подправьте, где ошибка:
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
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
 
char ch[100];
char *Rus(const char in[],char z[]);
char *Rus(const char in[],char z[])
{
  if(CharToOem(in,z))return z;
  else return 0;
}
 
enum Shape{prizm,parallelepiped,cube,pyramid,cone,cylinder};
enum Color{red,yellow,green,blue,white};
enum Material{metal,wood,plastic,cardboard};
enum Filter{water,milk,air,quartz_sand,vegetable_oil};
 
const char* NameShapes[cylinder+1]={"prizm","parallelepiped","cube","pyramid","cone","cylinder"};
const char* NameColors[white+1]={"red","yellow","green","blue","white"};
const char* NameMaterials[cardboard+1]={"metal","wood","plastic","cardboard"};
const char* NameFilters[vegetable_oil+1]={"water","milk","air","quartz_sand","vegetable_oil"};
const float p1[cardboard+1]={7.874,0.861,1.235,0.689};
const float p2[vegetable_oil+1]={1.0,1.032,0.001293,2.65,0.87};
const float k[cylinder+1]={1.0,1.0,1.0,1.0/3.0,1.0/3.0,1.0};
 
class Body
{
  private:
           char* name;
           Shape shape;
           Color color;
           Material material;
           Filter   filter;
           float H,So,Sb,Sp,thickness;
  public:
           Body(char* name,Shape shape,Color color,Material material);
           Body(char* name,Shape shape,Color color,Material material,
                Filter filter,float thickness);
           ~Body();
           float GetV1();
           float GetV2();
           float GetP1();
           float GetP2();
           const char* DisplayShape();
           const char* DisplayColor();
           const char* DisplayMaterial();
           const char* DisplayFilter();
           void Dispaly();
           float get_H(float H);
           float get_So(float So);
           float get_Sb(float Sb);
           float get_Sp(float Sp);
};
 
Body::Body(char* name,Shape shape,Color color,Material material)
{}
 
Body::Body(char* name,Shape shape,Color color,Material material,
           Filter filter,float thickness)
{}
 
Body::~Body()
{
  if(this->name!=NULL)
     delete[]this->name;
}
 
float Body::GetV1()
{return H*So*k[shape];}
 
float Body::GetV2()
{return Sp*thickness;}
 
float Body::GetP1()
{return p1[material]*GetV1();}
 
float Body::GetP2()
{return GetP1()+p2[filter]*(GetV1()-GetV2());}
 
const char* Body::DisplayShape()
{return NameShapes[shape];}
 
const char* Body::DisplayColor()
{return NameColors[color];}
 
const char* Body::DisplayMaterial()
{return NameMaterials[material];}
 
const char* Body::DisplayFilter()
{return NameFilters[filter];}
 
void Body::Dispaly()
{
   cout<<Rus("Имя объекта - ",ch)<<name<<"."<<endl;
   cout<<Rus("Форма объекта - ",ch)<<shape<<"."<<endl;
   cout<<Rus("Площадь основания равна:          \tSo=",ch)<<So<<endl;
   cout<<Rus("Площадь боковой поверхности равна:\tSb=",ch)<<Sb<<endl;
   cout<<Rus("Площадь полной поверхности равна: \tSp=",ch)<<Sp<<endl;
   cout<<Rus("Объем обекта равен:               \tV=",ch)<<GetV1()<<endl;
   cout<<Rus("Вес объекта равен:                \tP=",ch)<<GetP1()<<endl;
   cout<<"Hello! I`m an object "<<name<<" - "<<DisplayColor()<<' '<<
           DisplayMaterial()<<' '<<DisplayShape()<<".\n";
}
 
float Body::get_H(float H)
     {  this->H=H;
     return H;   }
float Body::get_So(float So)
     {  this->So=So;
     return So;  }
float Body::get_Sb(float Sb)
     {  this->Sb=Sb;
     return Sb; }
float Body::get_Sp(float Sp)
     {  this->Sp=Sp;
     return Sp; }
 
class class_prizm: public Body
{
  public:
  class_prizm(char* name,Shape shape,Color color,Material material,float H,float So,float Sb,float Sp):
              Body(name,shape,color,material)
  {
    get_H(H);
    get_So(So);
    get_Sb(Sb);
    get_Sp(Sp);
  }           
  class_prizm(char* name,Shape shape,Color color,Material material,
              Filter filter,float thickness,float H,float So,float Sb,float Sp):
              Body(name,shape,color,material,filter,thickness)
  {
    get_H(H);
    get_So(So);
    get_Sb(Sb);
    get_Sp(Sp);
  }
};
 
int main()
{
  class_prizm pri("Mama",cube,blue,plastic,air,1.0,1.0,1.0,1.0,1.0);
  pri.Dispaly();
  getch();
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2011, 12:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос перегрузка классов (C++):

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов - C++
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

Перегрузка классов - C++
struct Massiv { int n; int *p; Massiv () { p=0; n=0; } Massiv (int *y,int n)

Шаблоны классов, перегрузка операторов - C++
Задание:Реализовать шаблон классов Array. Перегрузить операторы присваивания =, ввода &gt;&gt; и вывода &lt;&lt; (предусмотреть обработку ошибок...

Перегрузка операторов для классов - C++
Определить класс описывающий вектор в пространстве. Для класса перегрузить префиксный унарный оператор. Написать программу в которой...

Перегрузка операторов для наследованных классов - C++
Есть один класс, для него определена операция сложения. Есть так же наследованный класс для него работает операция сложения определенная...

Перегрузка ofstream / ifstream для классов - C++
Приветствую! Возникла трудность. Имеется класс с данными. Необходимо реализовать чтение и ввод объекта класса в файл посредством перегрузки...

11
LosAngeles
Заблокирован
25.07.2011, 12:27 #2
зачем столько параметров в body передавать, если они не используются?

Добавлено через 2 минуты
C++
1
2
3
4
5
Body::~Body()
{
  if(this->name!=NULL)
         delete[]this->name;
}
name нигде неинициализируется
1
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
25.07.2011, 12:27 #3
Я не вникал - но вылетает в функции
C++
1
2
float Body::GetV1()
{return H*So*k[shape];}
Наверное происходит выход за границы массива. Смотри переменную shape
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
25.07.2011, 12:27  [ТС] #4
по заданию надо добавить еще конструктор в базовый и производынй классы
0
LosAngeles
Заблокирован
25.07.2011, 12:32 #5
а если бы даже инициализировалась, то delete-ом всё равно нельзя её удалять.

Добавлено через 2 минуты
конструкторы и деструктор написаны неправильно
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
25.07.2011, 12:32  [ТС] #6
LosAngeles, а как тогда, я просто сам изучаю с++, может что-то и не понял
0
LosAngeles
Заблокирован
25.07.2011, 12:35 #7
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
Body::Body(char* name,Shape shape,Color color,Material material)
{}
Body::Body(char* name,Shape shape,Color color,Material material,
Filter filter,float thickness)
{}
явно чё то должно быть между { и }

Добавлено через 46 секунд
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
get_H(H);
get_So(So);
get_Sb(Sb);
get_Sp(Sp);
только четыре параметра инициализируешь, в деструкторе делет убери
1
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
25.07.2011, 12:38 #8
что-то типо
C++
1
2
3
4
5
6
Body::Body ( vs9kay hernya ) 
{
        Name = setName( name );
        Shape = setShape ( shape );
       и т.д.
}
или инициализировать пустыми значениями сразу
0
LosAngeles
Заблокирован
25.07.2011, 12:38 #9
проще все char* на string заменить
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
25.07.2011, 20:36  [ТС] #10
Извините за наглость, а подправить сможете?

Добавлено через 7 часов 47 минут
Граждане подправьте код пожалуйста
0
LosAngeles
Заблокирован
25.07.2011, 20:50 #11
ушибки все указаны, сам исправляй
1
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,245
25.07.2011, 20:52 #12
Цитата Сообщение от LosAngeles Посмотреть сообщение
а если бы даже инициализировалась, то delete-ом всё равно нельзя её удалять.
наверно потому что нигде не выделяется (по крайней мере я не заметил)
но если он имел ввиду
типа
C++
1
2
3
4
5
Body::Body(char* name,Shape shape,Color color,Material material,
                   Filter filter,float thickness)
{
this->name=name;// перекрытие имен однако
}
и будет вызов типа
C++
1
2
char * k=new [100];
Body a(k,......
очень даже может удалится только не там и не то
поэтому
Цитата Сообщение от LosAngeles Посмотреть сообщение
в деструкторе делет убери
не ты выделял не тебе и удалять
1
25.07.2011, 20:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2011, 20:52
Привет! Вот еще темы с ответами:

Перегрузка оператора = и +=, используя наследование классов - C++
Есть 2 класса (Point и Rect). В классе Rect нужно перегрузить операцию = и += не нарушая правил инкапсуляции. Я пробую через функции get_x,...

Шаблоны классов, перегрузка operator<< класса ostream - C++
Не компилируется программа. fatal error: 1 unresolved externals Как правильно определить operator&lt;&lt; ??? #include &lt;iostream&gt; ...

Перегрузка арифметических операций для работы с объектами классов. - C++
Создать класс Animal, содержащий следующие элементы: - поле «вес» float Mass; - поле «пол» char* Sex; - поле «окрас» char* Color; ...

Перегрузка оператора "<<" для вывода пользовательских классов - C++
Всем доброго времени суток. Пытаюсь сделать перегрузку оператора &quot;&lt;&lt;&quot; для того, чтобы можно было выводить объекты пользовательского класса...


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

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

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