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

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

Войти
Регистрация
Восстановить пароль
 
lev_
3 / 3 / 0
Регистрация: 26.05.2014
Сообщений: 158
#1

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

08.06.2014, 03:34. Просмотров 441. Ответов 4
Метки нет (Все метки)

Составить программу с одним родительским классом и двумя потомками. Все поля должны быть закрытыми. Потомки должны содержать виртуальные функции. Для родительского объекта создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора. Составить тестирующую программу. В ней нужно реализовать вывод параметров объектов на экран монитора.

Родительский класс: Животное (поле - кличка).
Потомки: Кошка (поле рост –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++ Статические члены и функции
виртуальные функции C++
Статические переменные и функции C++
C++ виртуальные функции
виртуальные функции C++
Статические функции C++
статические функции C++
C++ Статические функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1795 / 1213 / 284
Регистрация: 05.06.2014
Сообщений: 3,492
08.06.2014, 15:31     Статические и виртуальные функции #2
Для родительского объекта создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора.
Перечитать чем класс отличается от объекта класса.
Перечитать чем static функция отличается от прочих.
Задуматься каким мистическим образом статическая функция получит результаты виртуальной.
Объяснить почему поставленные условия являются бредом сивой кобылы.
lev_
3 / 3 / 0
Регистрация: 26.05.2014
Сообщений: 158
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
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
08.06.2014, 22:03     Статические и виртуальные функции #4
Ваш преподаватель называет статическими обычные функции-члены. Что многое говорит об его ужасающей некомпетентности.
Renji
1795 / 1213 / 284
Регистрация: 05.06.2014
Сообщений: 3,492
08.06.2014, 22:14     Статические и виртуальные функции #5
видимо опечатка: Для родительского класса создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора.
Да без разницы. Статический метод НЕ применим к конкретному объекту класса. У него НЕТ this. Это самая обычная функция, просто расположенная в пространстве имен класса. Поэтому из статической функции принципиально невозможно вызвать виртуальную. А условия задачи под любым соусом являются бредом сивой кобылы.
Yandex
Объявления
08.06.2014, 22:14     Статические и виртуальные функции
Ответ Создать тему
Опции темы

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