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

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

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

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

09.07.2011, 22:02. Просмотров 911. Ответов 11
Метки нет (Все метки)

Народ, здарова!
Есть код:
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() производного класса.
Необходимио создать несколько объектов с разными именами, вывести значения площадей их основания, боковой и полнойц поверхностей, а также объема соответствующего геометрического тела.
Мои попытки указаны выше. кто сможет докатайте, плиз, не знаю ето как сделать.
Заранее всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2011, 22:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не понимаю как сделать наследование классов (C++):

Немного не понимаю как правильно сделать наследование - C++
Вот например, есть структура Point(точка). Если надо сделать структуру Round(круг), то в этом случае надо наследовать Point потому что у...

Нужно сделать композицию классов через объектные поля. (Не наследование!) - C++
Здравствуйте, у вас я тут впервые. Можете помочь с одним школьным заданием для моей подруги. Задача: //Реализовать класс Money...

Как реализовать наследование классов - C++
Здравствуйте, уважаемые форумчане. Помогите с решением проблемной ситуации, связанной скорее всего с аргументами в коде. Я определяю...

Как реализовать правильное наследование классов - C++
Здравствуйте, столкнулся с такой проблемой. Имеется базовый класс Writers и нужно создать классы Book, Genre, Country. В классе Writer...

Заменить наследование классов на наследование интерфейсов - C++
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование классов как можно оптимизировать код и условие - C++
Создал два класса родительский монстр и наследный демон. у демона появляется значение разум и условие сила+жизни+разум&lt;=200. Силу и жизнь...

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

Добавлено через 50 секунд
А, вы даже не вызывать их пытаетесь, а описать в теле конструктора. Описывать одни функции в теле других в языке С++ нельзя.
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:12  [ТС] #5
ошибки там есть, покажите пожалуйста на примере как да что, заранее благодарен
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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;
}
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:21  [ТС] #7
кому нетяжело подправьте мой код, плиз
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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);
 }
};
1
Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
09.07.2011, 22:39  [ТС] #9
а зачем this, извините я туповат
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.07.2011, 22:42 #10
Mr. Pyatachok, чтобы различить поля класса и параметры функции (потому как они одинаково называются). Если бы параметры имели другие имена, можно было бы явно не указывать, что мы обращаемся именно к полю класса с именем (например) H, но поскольку имена совпадают, надо различить области видимости.
1
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
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
09.07.2011, 23:03 #12
Значит вы что-то поменяли в коде. Поскольку все сеттеры здесь и так member function.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2011, 23:03
Привет! Вот еще темы с ответами:

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

подскажите как првильно написать программу про наследование классов - C++
подскажите как првильно написать задачу про наследование классов вот надо написать задачу про кошку чтобы 1 пророда-сиамская ...

Наследование, не понимаю в чем ошибка - C++
Задание из Лафоре, наследование. Даже пример есть, но почему-то не работает: в консоле выводит первые 79 символов s1 и все. VS 2010 class...

Не понимаю как сделать - C++
Найти и распечатать все натуральные трехзначные числа, равные сумме кубов своих цифр. #include&lt;stdio.h&gt; #include&lt;conio.h&gt; int main() ...


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

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

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