Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 00:30   #1
нона
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 14
По умолчанию не могу найти ошибки, тема классы в С++

вот код задания
#include<iostream.h>
#include<math.h>

class Prism_Inscribed_Rectilineal_Triangl {
double r,a,h;
public:
void set_Init(double r,double a,double h);
void print();
void skan();
double get_So();
double get_Sb();
double get_Sp();
};
void skan(Prism_Inscribed_Rectilineal_Tr iangl *t);

int main(){


Prism_Inscribed_Rectilineal_Triangl my_pr;
Prism_Inscribed_Rectilineal_Triangl *my_pr1 =new Prism_Inscribed_Rectilineal_Triangl ;

cout<<"1 \n";
skan(&my_pr);
my_pr.print();

cout<<"2\n";
skan(my_pr1);
my_pr1->print();

delete my_pr1;
system ("pause");

return 0;
}

void Prism_Inscribed_Rectilineal_Triangl ::set_Init (double rr,double aa,double hh){
r=rr; a=aa; h=hh;
}

void Prism_Inscribed_Rectilineal_Triangl :rint(){
cout<<"r="<<r<<" "<<"a="<<a<<" "<<"h="<<h<<endl;
cout<<"So="<<get_So()<<" Sb="<<get_Sb()<<" Sp="<<get_Sp()<<endl;
}

double Prism_Inscribed_Rectilineal_Triangl :: get_So(){
return a*a*sqrt(3/4.0); }

double Prism_Inscribed_Rectilineal_Triangl :: get_Sb() {
return 3*a*h;
}

double Prism_Inscribed_Rectilineal_Triangl :: get_Sp() {
return 2* get_So()+ get_Sb();
}

void skan(Prism_Inscribed_Rectilineal_Tr iangl *t){
double r,a,h;
cout<<" r=";
cin>>r;
cout<<" "<<"a=";
cin>>a;
cout<<" "<<"h=";
cin>>h;
t->set_Init(r,a,h);
}

нужно изменить программу так чтобы инициализация объекта производилась с помощью конструктора с параметрами.Ввести еще одну закрытую переменную класса для хранения имени объекта. Выделение памяти для имени объекта (посредством оператора new) и его инициализацию провести в конструкторе, освобождение выделенной памяти (посредством оператора delete)- в деструкторе.Создать несколько объектов разработанного класса , вывести занчения площадей их оснований, боковой и полной поверхностей. Вот что я написала....


#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

class Prism_Inscribed_Rectilineal_Triangl
{
protected:
char* fName;
double fR;
double fH;
double fA;
public:
Prism_Inscribed_Rectilineal_Triangl ( char* Name,double R, double H,double A);
~ Prism_Inscribed_Rectilineal_Triangl ()
double get_So();
double get_Sb();
double get_Sp();
void set_Init (char* Name,double R, double H,double A);
void print ();
};
Prism_Inscribed_Rectilineal_Triangl ::Prism_Inscribed_Rectilineal_Trian gl(char *Name,double R,double H,double A)
{
strcpy ( Prism_Inscribed_Rectilineal_Triangl ::R,R);
strcpy ( Prism_Inscribed_Rectilineal_Triangl ::H,H);
strcpy ( Prism_Inscribed_Rectilineal_Triangl ::A,A);
Prism_Inscribed_Rectilineal_Triangl :: Name=Name;
}
Prism_Inscribed_Rectilineal_Triangl ::~Prism_Inscribed_Rectilineal_Tria ngl()
{
delete[] this->fName;
}
{
cout<<" Destruction of the object!"<< endl;
}
void Prism_Inscribed_Rectilineal_Triangl ::set_Init (char* Name, double R, double H,double A)
{
delete[] this->fName;
this->fName = new char[strlen(Name)];
strcpy(this->fName, Name);
this->fR = R;
this->fH = H;
this->fA = A;
}
void Prism_Inscribed_Rectilineal_Triangl ::Print ()
{
cout<<"R="<<R<<" "<<"A="<<A<<" "<<"H="<<H<<endl;
cout<<" So="<<get_So()<<" Sb="<<get_Sb()<<" Sp="<<get_Sp()<<endl;
}

double Prism_Inscribed_Rectilineal_Triangl :: get_So(){
return A*A*sqrt(3/4.0); }

double Prism_Inscribed_Rectilineal_Triangl :: get_Sb() {
return 3*A*H;
}

double Prism_Inscribed_Rectilineal_Triangl :: get_Sp() {
return 2* get_So()+ get_Sb();
}
int main ()
{
Prism_Inscribed_Rectilineal_Triangl *a = new Prism_Inscribed_Rectilineal_Triangl (13, "F= ", 7.0);
Prism_Inscribed_Rectilineal_Triangl *b = new Prism_Inscribed_Rectilineal_Triangl (13, "F= ", 1.0);

a->Print();
b->Print();

delete a;
delete b;

getch();
return 0;
}
нона вне форума Ответить с цитированием
Старый 16.11.2011, 02:44   #2
<gr>
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 11
По умолчанию

Что касаемо ошибок. Бросилось в глаза сразу вот что:
1) protected не нужен. Используйте private.

2)
Цитата:
Prism_Inscribed_Rectilineal_Triangl ::Prism_Inscribed_Rectilineal_Trian gl(char *Name,double R,double H,double A)
лишний пробел в Trian gl(...)

3)
Цитата:
Prism_Inscribed_Rectilineal_Triangl ::Prism_Inscribed_Rectilineal_Trian gl(char *Name,double R,double H,double A)
{
strcpy ( Prism_Inscribed_Rectilineal_Triangl ::R,R);
strcpy ( Prism_Inscribed_Rectilineal_Triangl ::H,H);
strcpy ( Prism_Inscribed_Rectilineal_Triangl ::A,A);
Prism_Inscribed_Rectilineal_Triangl :: Name=Name;
}
Это что за чудо???

4)
Цитата:
Prism_Inscribed_Rectilineal_Triangl ::~Prism_Inscribed_Rectilineal_Tria ngl()
{
delete[] this->fName;
}
Снова лишний пробел в Triangl(...)

5)
Цитата:
{
cout<<" Destruction of the object!"<< endl;
}
Раздельное питание? добавьте cout<<" Destruction of the object!"<< endl; в деструктор

6)
Цитата:
void Prism_Inscribed_Rectilineal_Triangl ::set_Init (char* Name, double R, double H,double A)
{
delete[] this->fName;
this->fName = new char[strlen(Name)];
strcpy(this->fName, Name);
this->fR = R;
this->fH = H;
this->fA = A;
}
Смотрите- у вас получилось две одинаковые функции с одинаковым списком параметров. Перегрузить их не удастся. да и следуя из условий получается, что то "чудо" вовсе не нужно. Удалите его! Не жалейте.

7)
Цитата:
void Prism_Inscribed_Rectilineal_Triangl ::Print ()
Это метод вашего класса. Однако в прототипах класса его нет. Нужно добавить.

8)
Цитата:
Prism_Inscribed_Rectilineal_Triangl *a = new Prism_Inscribed_Rectilineal_Triangl (13, "F= ", 7.0);
Prism_Inscribed_Rectilineal_Triangl *b = new Prism_Inscribed_Rectilineal_Triangl (13, "F= ", 1.0);
У вас нет необходимого конструктора. Задайте правильно аргументы.

9)
Цитата:
delete a;
delete b;
Лучше писать
Код:
delete [] a; 
delete [] b;
Исправьте для начала вот это.
The truth is out there...
<gr> вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
классы, не могу найти ошибку! в С++ нона Помощь студентам 3 18.10.2011 21:33
Не могу найти причину ошибки pastuhdima Помощь студентам 0 06.10.2011 00:24
не могу найти раздел ошибки в delphi. подскажите please V.OX Свободное общение 1 20.12.2009 23:22
Не могу найти две ошибки. Lunex.08 Общие вопросы C/C++ 10 22.10.2009 09:44
Не могу найти ошибки в задачах Кипятилка Помощь студентам 4 01.07.2009 17:58