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

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

Восстановить пароль Регистрация
 
lev_
2 / 2 / 0
Регистрация: 26.05.2014
Сообщений: 119
08.06.2014, 03:34     Статические и виртуальные функции #1
Составить программу с одним родительским классом и двумя потомками. Все поля должны быть закрытыми. Потомки должны содержать виртуальные функции. Для родительского объекта создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора. Составить тестирующую программу. В ней нужно реализовать вывод параметров объектов на экран монитора.

Родительский класс: Животное (поле - кличка).
Потомки: Кошка (поле рост –h )
Собака (поле рост- h)
Полиморфные методы: Вес животного
(Кошка 15*h*h*h)
(Собака 10*h*h*h)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2014, 03:34     Статические и виртуальные функции
Посмотрите здесь:

C++ Виртуальные функции
C++ виртуальные и чисто виртуальные функции
C++ Статические члены и функции
Статические переменные и функции C++
Статические функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,958
08.06.2014, 15:31     Статические и виртуальные функции #2
Для родительского объекта создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора.
Перечитать чем класс отличается от объекта класса.
Перечитать чем static функция отличается от прочих.
Задуматься каким мистическим образом статическая функция получит результаты виртуальной.
Объяснить почему поставленные условия являются бредом сивой кобылы.
lev_
2 / 2 / 0
Регистрация: 26.05.2014
Сообщений: 119
08.06.2014, 22:01  [ТС]     Статические и виртуальные функции #3
пример преподавателя. вроде на билдере

Модуль Shape.h
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
class Figura                         // абстрактный класс - базовый
{
private:
AnsiString Name;
public:
 void SetName(AnsiString s);
 AnsiString GetName();
 virtual float area()=0;     // чисто виртуальный метод
 float VolOfPriz(float H);  
};
 
class Square: public Figura{
  private:
   float Side;
  public:
   Square();
   void SetSide(float s);
   float area ();               
};
 
class Disk: public Figura{
 private:
  float Radius;
 public:
  Disk();
  void SetRad(float r);
  float area();
};
Shape.cpp
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
void Figura::SetName(AnsiString s)
{
 Name=s;
}
 
 AnsiString Figura::GetName()
 {
  return Name;
 }
 
 float Figura::VolOfPriz(float H)
 {
  return H*area();                                 // через вызов статического метода происходит вызов виртуального 
 }
 
 Square::Square()
 {
  Side=0;
 }
 void  Square::SetSide(float s)
 {
  Side=s;
 }
 float Square::area ()
 {
  return Side*Side;
 }
Disk::Disk()
{
  Radius=0;
}
void  Disk::SetRad(float r)
 {
   Radius=r;
 }
float Disk::area()
{
  return Radius*Radius*3.1415;
}
Модуль Unit1.h - модуль тестирующей программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        TEdit *Edit2;
        TMemo *Memo1;
        TButton *Button1;
        TEdit *Edit3;
        TEdit *Edit4;
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
Square* Sp= new Square;
Disk* Dp=new Disk;
Figura* F[2];
Unit1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Sp->SetName(Edit1->Text);
Sp->SetSide(StrToFloat(Edit2->Text));
Memo1->Lines->Add(Sp->GetName()+" "+FloatToStr(Sp->area()));  
Dp->SetName(Edit3->Text);
Dp->SetRad(StrToFloat(Edit4->Text));
Memo1->Lines->Add(Dp->GetName()+" "+FloatToStr(Dp->area()));    
F[0]=Sp;
F[1]=Dp;
for (int i=0 ; i<2; i++)
Memo1->Lines->Add(F[i]->GetName()+" призма  "+FloatToStr(F[i]->VolOfPriz(3.5))); // вызов метода area() происходит в зависимости от того  указатель на какой объект содержится в  F[i]
}
Добавлено через 1 минуту
Цитата Сообщение от Renji Посмотреть сообщение
Для родительского объекта создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора.
сам не понимаю) задание такое

Добавлено через 4 минуты
видимо опечатка: Для родительского класса создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
08.06.2014, 22:03     Статические и виртуальные функции #4
Ваш преподаватель называет статическими обычные функции-члены. Что многое говорит об его ужасающей некомпетентности.
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,958
08.06.2014, 22:14     Статические и виртуальные функции #5
видимо опечатка: Для родительского класса создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора.
Да без разницы. Статический метод НЕ применим к конкретному объекту класса. У него НЕТ this. Это самая обычная функция, просто расположенная в пространстве имен класса. Поэтому из статической функции принципиально невозможно вызвать виртуальную. А условия задачи под любым соусом являются бредом сивой кобылы.
Yandex
Объявления
08.06.2014, 22:14     Статические и виртуальные функции
Ответ Создать тему
Опции темы

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