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

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

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

виртуальные функции - C++

09.08.2011, 21:13. Просмотров 1105. Ответов 21
Метки нет (Все метки)

Всем привет, помогите с исправлением функции
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
#include<iostream.h>
#include<conio.h>
#include<string.h>
 
enum Shape{prizm,parallelepiped,cube,pyramid,cone,cylinder};
 
class Body
{   private:
  char* Name;
  Shape shape_s;
  float H,So,Sb,Sp,V,p,k;
 
   public:
  Body(char* name,Shape s);
  ~Body();
  float get_V();
  virtual float get_H(float H)const=0;
  virtual float get_So(float So)const=0;
  virtual float get_Sb(float Sb)const=0;
  virtual float get_Sp(float Sp)const=0;
  void Display();
};
 
  Body::Body(char *name,Shape s)
{  Name=new char[strlen(name)+1];
   strcpy(Name,name);
   shape_s=s;
   switch(s)
          {
            case prizm:          k=1.0;                  break;
            case parallelepiped: k=1.0;                  break;
            case cube:           k=1.0;                  break;
            case pyramid:        k=1.0/3.0;              break;
            case cone:           k=1.0/3.0;              break;
            case cylinder:       k=1.0;                  break;
            default:cout<<"Неизвестная фигура."; break;
          } if(k!=0){ get_V(); }
}
 
  Body::~Body()
  {delete[]Name;}
 
  float Body::get_V()
  {float V=So*H*k; return V;}
 
 
   void Body::Display()
  {cout<<"Имя объекта - "<<Name<<"."<<endl;
   cout<<"Форма объекта - "<<shape_s<<"."<<endl;
   cout<<"Площадь основания равна:                 \tSo="<<So<<endl;
   cout<<"Площадь боковой поверхности равна:       \tSb="<<Sb<<endl;
   cout<<"Площадь полной поверхности равна:        \tSp="<<Sp<<endl;
   cout<<"Объем обекта равен:                      \tV="<<get_V()<<endl;}
 
class class_prizm:public Body
{   public:
  class_prizm(char *name,Shape s,float H,float So,float Sb,float Sp):Body(name,s)
 {
  float get_H(H)
  {return H;}
  float get_So(So)
  {return So;}
  float get_Sb(Sb)
  {return Sb;}
  float get_Sp(Sp)
  {return Sp;}
 }
};
[C++ Error] Unit1.cpp(60): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(67): E2139 Declaration missing ;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2011, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос виртуальные функции (C++):

виртуальные и чисто виртуальные функции - C++
Чем они отличаются?? если можно, с примерами. И как из виртуальной функции сделать чисто виртуальную? #include &lt;iostream&gt; using...

Виртуальные функции - C++
Не работает код. Проблема в виртуальной функции. Как это можно исправить? #include &lt;iostream&gt; class Convert { protected: ...

Виртуальные функции - C++
Здравствуйте,уважаемые посетители форума.Пишу программу созданию фигур и их перемещению на экране использую виртуальные функции.И...

Виртуальные функции. - C++
Приветствую всех. Дана такая программа (на самом деле она больше и сложнее, но структура и проблема те же): #include &lt;iostream&gt; ...

Виртуальные функции - C++
Создайте класс Word, определите в нем виртуальную функцию-член word_main(*char x), которая выводит на экран фразу: “Я знаю слово x”....

виртуальные функции - C++
Помогите плиз с вертуальными функциями. Некак немогу понят вот эту задачу: переопределяемая виртуальная функция находит: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
10.08.2011, 02:27 #16
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
А если вотето чудо также выводить
C++
1
2
3
4
5
6
7
8
float Body::set_H(float H)
  {this->H=H; return H;}
  float Body::set_So(float So)
  {this->So=So; return So;}
  float Body::set_Sb(float Sb)
  {this->Sb=Sb; return Sb;}
  float Body::set_Sp(float Sp)
  {this->Sp=Sp; return Sp;}
то будут ошибки, а можно 2 раза выводить с помощью вот этих функций и виртуальных одновременно, подскажите пожалуйста чтобы окончательно разобраться
silentnuke, Вы очень приятный в общении человек, поклон Вам до Земли-матушки))

Добавлено через 4 минуты
Извините за наглость, я просто хочу разобраться, а то в книгах легкие примеры да и разжевывают, а тут сел да и сел в калошу((
хм, не понял сути вопроса.
да и зачем устанавливать значение, и потом ещё возвращать значение которое передали.
опишите всеже чего хотите добиться этим, а ещё лучше суть задания, которое нужно выполнить.
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
10.08.2011, 02:50  [ТС] #17
Извините, а Вы сможете посидеть немного и объяснить мне немного моих огрехов в этом задании, я Вас не слишком утруждаю, задание сейчас напишу

Добавлено через 15 минут
Дано глобальное перечисление enum shape, необходимо было разработать базовый класс Body, который содержит закрытые переменные H,So,Sp,Sb,V,перменную закрытого типа shape, характеризующую форму объекта. Конструктор базового класса должен именовать объект,
значения же H,So,Sp и Sb базового класса установит с помощью функиций get_H(),So() и т.д. производного класса,
а далее с виртуальными я с Вами разобрался, я просто хотел бы вывести и так и этак

Добавлено через 4 минуты
одновременно вывести, чтобы при помощи виртуальных функций и обыкновенных, чтобы показывало результат до и после))
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
10.08.2011, 02:55 #18
эм, что вывести?
у вас функции get задают значение полям класса.
а выводит данные функция Display().
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
10.08.2011, 03:02  [ТС] #19
Ай я да дурак!
C++
1
2
3
4
5
6
7
8
9
10
11
class_prizm(char *name,Shape s,float H,float So,float Sb,float Sp):Body(name,s)
        {
                set_H(H);
                set_So(So);
                set_Sb(Sb);
                set_Sp(Sp);
        }
        void set_H(float H){this->H=H;}
        void set_So(float So){this->So=So;}
        void set_Sb(float Sb){this->Sb=Sb;}
        void set_Sp(float Sp){this->Sp=Sp;}
Не по-русски написал, все ж есть, получается что здесь функции 2 раза вызываются так же?
напр. set_H(H); и void set_H(float H){this->H=H;}
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
10.08.2011, 03:17 #20
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
Ай я да дурак!
C++
1
2
3
4
5
6
7
8
9
10
11
class_prizm(char *name,Shape s,float H,float So,float Sb,float Sp):Body(name,s)
        {
                set_H(H);
                set_So(So);
                set_Sb(Sb);
                set_Sp(Sp);
        }
        void set_H(float H){this->H=H;}
        void set_So(float So){this->So=So;}
        void set_Sb(float Sb){this->Sb=Sb;}
        void set_Sp(float Sp){this->Sp=Sp;}
Не по-русски написал, все ж есть, получается что здесь функции 2 раза вызываются так же?
напр. set_H(H); и void set_H(float H){this->H=H;}
set_H(H); - вызов функции
а void set_H(float H){this->H=H;} - определение чисто виртуальной функции set_H.
поскольку у вас в базовом классе, функции созданы чисто виртуальными, то вам в классе наследнике обязательно нужно переопределить функции, иначе не сможете создать объект класса, т.к он будет считаться абстрактным..
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
10.08.2011, 03:27  [ТС] #21
Все, вопросов больше нет, окончательно разобрался, еще раз огромное Вам спасибо, извините что потратил Ваше время, спасибо за объяснения (да и за нервы, которые хватило чтобы разобраться чего я хотел), ого, уже поздно, спокойной ночи, еще раз огромное спасибо
0
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,060
10.08.2011, 04:37 #22
Mr. Pyatachok ты не изучил код программы который тебе был предоставлен наследование классов не начал читать те книги что я тебе советовал. и возишься скорее всего в добавок не с своим кодом. Если бы ты изучал С++ с основ с того какой у него синтаксис и тому подобное ты бы понимал что "Declaration syntax error" - означает ошибку синтаксиса языка а "Declaration missing ;" - осутствие в тексте программы оператора "точка с запятой". разбирался бы в устройстве элемента языка Enum, массивах и прочих базовых конструкциях языка.

P. S. изучи тот код что я написал. и поверь там нет ничего лишнего, если что - то равняется 0 значит оно должно ему равняться т. к. используются базовые возможности языка

P. P. S. тебе рано работать с ООП вообще и виртуальными функциями в частности. Выучи основы и избався от "детских болячек" начинающего программиста

1) выучи базовый синтаксис и базовые операторы/операции/функции языка
2) научись форматировать код
3) найди описание стандартных ошибок IDE которую используешь

и лишь после этого начинай учить ООП. И самое главное не смешивай тексты програм без полного понимания логики работы кода
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2011, 04:37
Привет! Вот еще темы с ответами:

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

Виртуальные функции - C++
Здрасте! вот задачка, какбэ сделал, но нужны виртуальные функции. даже не знаю как их сделать. #include &lt;iostream.h&gt; #include...

виртуальные функции - C++
Помогите пожалуйста, создать абстрактный класс Shape с двумя чисто виртуальными методами Area() и Print(). Определить производные классы ...

Виртуальные функции - C++
Вопрос. Как вызвать функцию наследника через указатель на базовый класс? Так не компилируется 3.cpp:19:19: error: invalid covariant...


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

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

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