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

не понимаю как сделать наследование классов - C++

Восстановить пароль Регистрация
 
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:02     не понимаю как сделать наследование классов #1
Народ, здарова!
Есть код:
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
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<string.h>
 
enum shape{prizm,parallelepiped,cube,pyramid,cone,cylinder};
 
class Body
{
   private:
  char* name_obj;   //имя объекта
  shape forma_obj;  //форма объекта
  float H;          //высота объекта
  float So;         //площадь основания объекта
  float Sb;         //площадь боковой поверхности объекта
  float Sp;         //площадь полной поверхности объекта
  float V;          //объём объекта
  float k;          //коэффициент, зависящий от формы объекта
   public:
  Body(char *name,shape forma,float K=0)
      {
        name_obj=new char[strlen(name)+1];
        strcpy(name_obj,name);
        forma_obj = forma;
        k=K;
        switch(forma_obj)
              {
               case prizm:          cout<<"Призма.\n";
                                    k=1.0;
                                    break;
               case parallelepiped: cout<<"Параллелепипед.\n";
                                    k=1.0;
                                    break;
               case cube:           cout<<"Куб.\n";
                                    k=1.0;
                                    break;
               case pyramid:        cout<<"Пирамида.\n";
                                    k=1.0/3.0;
                                    break;
               case cone:           cout<<"Конус.\n";
                                    k=1.0/3.0;
                                    break;
               case cylinder:       cout<<"Цилиндр.\n";
                                    k=1.0;
                                    break;
               default:cout<<"Неизвестная фигура.\n";
             }
          if (k!=0)
          {
            V=k*So*H;
            cout<<"V = "<<V;
          } 
     }
  ~Body()
  {  delete[]name_obj;  }
};
 
class cl_prizm: public Body
{
  public:
  cl_prizm(char *name,shape forma,float H,float So,float Sb,float Sp):Body(name,forma)
 {
  void get_H(float H)
       {H=1.0;}
  void get_So(float So)
       {So=1.0;}
  void get_Sb(float Sb)
       {Sb=1.0;}
  void get_Sp(float Sp)
       {Sp=1.0;}
 }
};
Надо значения переменных H,So,Sb,Sp базового класса установить в конструкторе производного класса посредством выполнения функций get_H(),get_So(),get_Sb(),get_Sp() производного класса.
Необходимио создать несколько объектов с разными именами, вывести значения площадей их основания, боковой и полнойц поверхностей, а также объема соответствующего геометрического тела.
Мои попытки указаны выше. кто сможет докатайте, плиз, не знаю ето как сделать.
Заранее всем спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2011, 22:02     не понимаю как сделать наследование классов
Посмотрите здесь:

подскажите как првильно написать программу про наследование классов C++
C++ Наследование, не понимаю в чем ошибка
C++ Наследование\перегрузка, не понимаю в чем ошибка
C++ Не понимаю как сделать try/catch в программе
Найди серединку. Не понимаю как сделать и как начать C++
C++ Немного не понимаю как правильно сделать наследование
C++ ошибочка. не понимаю как сделать чтоб типы соответствовали
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
09.07.2011, 22:07     не понимаю как сделать наследование классов #2
производный класс не имеет прямого доступа к свойствам базового (тем, которые перечислены в private). поэтому нужно определить методы set/get для каждого свойства в базовом (в разделе public) и на основе их вызова строить конструктор производного класса.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
09.07.2011, 22:08     не понимаю как сделать наследование классов #3
код этот можешь выкинуть, страшно смотреть на него
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.07.2011, 22:10     не понимаю как сделать наследование классов #4
Начнём с того, что геттеры нужны для того, чтобы получать значения переменных, а не устанавливать их. В вашем случае нужно использовать сеттеры (функции, приставка к имени которых set_).
Далее, даже если забыть про неверные имена, у вас ведь не описаны функции get_X, а вы пытаетесь их вызывать. Опишите эти функции (с учётом правильности имён), а дальше спрашивайте, если по ходу вопросы появятся.
В остальном код особо не разглядывал, возможны и другие ошибки.

Добавлено через 50 секунд
А, вы даже не вызывать их пытаетесь, а описать в теле конструктора. Описывать одни функции в теле других в языке С++ нельзя.
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:12  [ТС]     не понимаю как сделать наследование классов #5
ошибки там есть, покажите пожалуйста на примере как да что, заранее благодарен
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.07.2011, 22:16     не понимаю как сделать наследование классов #6
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
#include <iostream>
 
class Foo
{
public:
    Foo():
    m_foo()
    {
    }
 
    int get_foo() const
    {
        return m_foo;
    }
 
    void set_foo(int foo)
    {
        m_foo = foo;
    }
 
private:
    int m_foo;
};
 
class Bar : public Foo
{
public:
    Bar(int foo)
    {
        set_foo(foo);
    }
};
 
int main()
{
    Foo f;
    Bar b(10);
 
    std::cout << f.get_foo() << std::endl;
    std::cout << b.get_foo() << std::endl;
 
    return 0;
}
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:21  [ТС]     не понимаю как сделать наследование классов #7
кому нетяжело подправьте мой код, плиз
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.07.2011, 22:28     не понимаю как сделать наследование классов #8
Ага. А пример вы для красного словца просили, не?

Добавлено через 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
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<string.h>
 
enum shape{prizm,parallelepiped,cube,pyramid,cone,cylinder};
 
class Body
{
   private:
  char* name_obj;   //имя объекта
  shape forma_obj;  //форма объекта
  float H;          //высота объекта
  float So;         //площадь основания объекта
  float Sb;         //площадь боковой поверхности объекта
  float Sp;         //площадь полной поверхности объекта
  float V;          //объём объекта
  float k;          //коэффициент, зависящий от формы объекта
   public:
  Body(char *name,shape forma,float K=0)
          {
                name_obj=new char[strlen(name)+1];
                strcpy(name_obj,name);
                forma_obj = forma;
                k=K;
                switch(forma_obj)
                          {
                           case prizm:          cout<<"Призма.\n";
                                                                        k=1.0;
                                                                        break;
                           case parallelepiped: cout<<"Параллелепипед.\n";
                                                                        k=1.0;
                                                                        break;
                           case cube:           cout<<"Куб.\n";
                                                                        k=1.0;
                                                                        break;
                           case pyramid:        cout<<"Пирамида.\n";
                                                                        k=1.0/3.0;
                                                                        break;
                           case cone:           cout<<"Конус.\n";
                                                                        k=1.0/3.0;
                                                                        break;
                           case cylinder:       cout<<"Цилиндр.\n";
                                                                        k=1.0;
                                                                        break;
                           default:cout<<"Неизвестная фигура.\n";
                         }
                  if (k!=0)
                  {
                        V=k*So*H;
                        cout<<"V = "<<V;
                  } 
         }
  ~Body()
  {  delete[]name_obj;  }
 
  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;}
};
 
class cl_prizm: public Body
{
  public:
  cl_prizm(char *name,shape forma,float H,float So,float Sb,float Sp):Body(name,forma)
 {
    set_H(H);
    set_So(So);
    set_Sb(Sb);
    set_Sp(Sp);
 }
};
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:39  [ТС]     не понимаю как сделать наследование классов #9
а зачем this, извините я туповат
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.07.2011, 22:42     не понимаю как сделать наследование классов #10
Mr. Pyatachok, чтобы различить поля класса и параметры функции (потому как они одинаково называются). Если бы параметры имели другие имена, можно было бы явно не указывать, что мы обращаемся именно к полю класса с именем (например) H, но поскольку имена совпадают, надо различить области видимости.
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:58  [ТС]     не понимаю как сделать наследование классов #11
Огромное спасибо Вам, silent_1991))))))

Добавлено через 14 минут
Извините, но компилятор выдает ошибки типа
[C++ Error] Unit1.cpp(72): E2297 'this' can only be used within a member function
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2011, 23:03     не понимаю как сделать наследование классов
Еще ссылки по теме:

C++ Не понимаю как сделать
Как реализовать наследование классов C++
C++ Наследование классов как можно оптимизировать код и условие
Нужно сделать композицию классов через объектные поля. (Не наследование!) C++
Не понимаю как сделать! C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.07.2011, 23:03     не понимаю как сделать наследование классов #12
Значит вы что-то поменяли в коде. Поскольку все сеттеры здесь и так member function.
Yandex
Объявления
09.07.2011, 23:03     не понимаю как сделать наследование классов
Ответ Создать тему
Опции темы

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