Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
prikolist
3 / 3 / 1
Регистрация: 19.07.2008
Сообщений: 142
#1

Создать класс комната, имеющий площадь, определенное число комнат, этаж - C++ Builder

27.03.2009, 13:17. Просмотров 3019. Ответов 14
Метки нет (Все метки)

Здравствуйте программисты! Недавно вот только немного, начал изучать С++ Builder 6.0 вот, препод дал задание. Подскажите пожалуйста, или дайте хотя б маленьький примерчик, вот условие задания. Заранне благодарен за помощь.

Код
Создать класс комната, имеющий площадь, определенное число комнат, этаж. Определить конструктор, деструктор и методы доступа( чтения и записи) полей класса. 
Создать два производных класса:
1)	Класс - однокомнатная квартира, содержащий комнату и кухню (ее площадь).
2)	Класс – трехкомнатная квартира, содержащий 3 комнаты (их площади), кухню (ее площадь).
Определить конструкторы, деструкторы, методы доступа(чтения и записи) площади, этажности, количества комнат однокомнатной и трехкомнатной квартиры. 
Создать экземпляры объектов всех классов.
В методах доступа к данным класса предусмотреть вывод сообщений поясняющих, метод какого класса вызывается
Благодраю заранне за ответ.
http://www.cyberforum.ru/cpp-builder/thread110725.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2009, 13:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создать класс комната, имеющий площадь, определенное число комнат, этаж (C++ Builder):

Создать класс Окружность:свойства-радиус,методы-площадь круга и длина окружности
даже не представляю с чего начать,ребят.

Создать класс RIELTER, с полями в закрытой части: количество комнат, этаж; площадь; адрес
Создать класс RIELTER, с полями в закрытой части: количество комнат, этаж;...

Дана информация о пяти квартирах. Запись имеет вид: фамилия владельца, площадь, число комнат, этаж. Вывести данные о квартирах
Дана информация о пяти квартирах. Запись имеет вид: фамилия владельца, площадь,...

Создать класс комната, имеющая площадь. Создать класс однокомнатных квартир, двухкомнатных и т.д
Создать класс комната, имеющая площадь. Создать класс однокомнатных квартир,...

Создать класс "Животное", имеющий классификацию: число конечностей, число потомков
Задачка звучит вот так...... Создать класс животное, имеющий классификацию...

14
BornLeader
53 / 49 / 9
Регистрация: 16.05.2008
Сообщений: 162
27.03.2009, 16:44 #2
Цитата Сообщение от prikolist Посмотреть сообщение
Создать класс комната, имеющий площадь, определенное число комнат, этаж.
Так класс комната или квартира???
0
prikolist
3 / 3 / 1
Регистрация: 19.07.2008
Сообщений: 142
27.03.2009, 17:01  [ТС] #3
Нужно создать 2 класса:
1) Класс - однокомнатная квартира, содержащий комнату и кухню (ее площадь).
(
2) Класс – трехкомнатная квартира, содержащий 3 комнаты (их площади), кухню

Добавлено через 9 минут 43 секунды
Я не в курсе. Вот дали условие задачи, и дали на размыщление неделю, нужно как-то постараться сделать.
Ещё было такое условие перед этим.
Постановка задачи:
1. В соответствии с заданным вариантом спроектировать иерархию классов;
2. Описать поведение и состояние всех компонент классов. Использовать спецификаторы доступа к полям и методам класса: public, private, published;
3. Создать экземпляры объектов классов;
4. В реализации программы должен быть предусмотрен вывод значений и области видимости (public, protected, private) полей родительского и производных классов,



Можно решить в консольном режиме, но желательно чтоб было на форме.

Добавлено через 35 секунд
Я не в курсе. Вот дали условие задачи, и дали на размыщление неделю, нужно как-то постараться сделать.
Ещё было такое условие перед этим.
Постановка задачи:
1. В соответствии с заданным вариантом спроектировать иерархию классов;
2. Описать поведение и состояние всех компонент классов. Использовать спецификаторы доступа к полям и методам класса: public, private, published;
3. Создать экземпляры объектов классов;
4. В реализации программы должен быть предусмотрен вывод значений и области видимости (public, protected, private) полей родительского и производных классов,



Можно решить в консольном режиме, но желательно чтоб было на форме.[/QUOTE]
0
BornLeader
53 / 49 / 9
Регистрация: 16.05.2008
Сообщений: 162
27.03.2009, 19:00 #4
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
78
79
80
81
82
83
84
85
86
87
88
class BaseRoom
{
public:
  BaseRoom(int square):m_nSquare(square){}
  BaseRoom(const BaseRoom& baseroom)
  {
    m_nSquare = baseroom.GetSquare();
  }
  virtual ~BaseRoom(void){}
  int GetSquare(void)const{return m_nSquare;}
protected:
  int m_nSquare;
};
 
class LivingRoom : public BaseRoom
{
public:
  LivingRoom(int square):BaseRoom(square){}
  virtual ~LivingRoom(void){}
};
 
class Kitchen : public BaseRoom
{
public:
  Kitchen(int square):BaseRoom(square){}
  virtual ~Kitchen(void){}
};
 
class OneRoomApartment
{
public:
  OneRoomApartment(int floor,Kitchen kitchen,LivingRoom livingRoom)
  :m_nFloor(floor)
  {
    FKitchen = new Kitchen(kitchen);
    FLivingRoom = new LivingRoom(livingRoom);
  };
  friend ostream& operator<<(ostream& os,const OneRoomApartment& apartament)
  {
    return os << "floor: " << apartament.m_nFloor << endl
              << "kitchen square: " << apartament.FKitchen->GetSquare() << endl
              << "livingRoom square: " << apartament.FLivingRoom->GetSquare() << endl;
  }
  virtual ~OneRoomApartment(void)
  {
    delete FKitchen;
    delete FLivingRoom;
  };
protected:
  int m_nFloor;
  Kitchen* FKitchen;
  LivingRoom* FLivingRoom;
};
 
class ThreeRoomApartament : public OneRoomApartment
{
public:
  ThreeRoomApartament(int floor,Kitchen kitchen,LivingRoom livingRoom1,LivingRoom livingRoom2,LivingRoom livingRoom3)
  :OneRoomApartment(floor,kitchen,livingRoom1)
  {
    FLivingRoom2 = new LivingRoom(livingRoom2);
    FLivingRoom3 = new LivingRoom(livingRoom3);
  }
  ~ThreeRoomApartament(void)
  {
    delete FLivingRoom2;
    delete FLivingRoom3;
  }
  friend ostream& operator<<(ostream& os,const ThreeRoomApartament& apartament)
  {
    //TODO
  }
private:
  LivingRoom* FLivingRoom2;
  LivingRoom* FLivingRoom3;
};
 
int main(void)
{
  OneRoomApartment OneRoom(5,(Kitchen)25,(LivingRoom)36);
  cout << OneRoom;
 
  ThreeRoomApartament ThreeRoom(3,(Kitchen)16,(LivingRoom)18,(LivingRoom)28,(LivingRoom)38);
  cout << ThreeRoom;
 
  getch();
  return 0;
}
Извини дописать не успел
0
prikolist
3 / 3 / 1
Регистрация: 19.07.2008
Сообщений: 142
27.03.2009, 19:04  [ТС] #5
Цитата Сообщение от BornLeader Посмотреть сообщение
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
78
79
80
81
82
83
84
85
86
87
88
class BaseRoom
{
public:
  BaseRoom(int square):m_nSquare(square){}
  BaseRoom(const BaseRoom& baseroom)
  {
    m_nSquare = baseroom.GetSquare();
  }
  virtual ~BaseRoom(void){}
  int GetSquare(void)const{return m_nSquare;}
protected:
  int m_nSquare;
};
 
class LivingRoom : public BaseRoom
{
public:
  LivingRoom(int square):BaseRoom(square){}
  virtual ~LivingRoom(void){}
};
 
class Kitchen : public BaseRoom
{
public:
  Kitchen(int square):BaseRoom(square){}
  virtual ~Kitchen(void){}
};
 
class OneRoomApartment
{
public:
  OneRoomApartment(int floor,Kitchen kitchen,LivingRoom livingRoom)
  :m_nFloor(floor)
  {
    FKitchen = new Kitchen(kitchen);
    FLivingRoom = new LivingRoom(livingRoom);
  };
  friend ostream& operator<<(ostream& os,const OneRoomApartment& apartament)
  {
    return os << "floor: " << apartament.m_nFloor << endl
              << "kitchen square: " << apartament.FKitchen->GetSquare() << endl
              << "livingRoom square: " << apartament.FLivingRoom->GetSquare() << endl;
  }
  virtual ~OneRoomApartment(void)
  {
    delete FKitchen;
    delete FLivingRoom;
  };
protected:
  int m_nFloor;
  Kitchen* FKitchen;
  LivingRoom* FLivingRoom;
};
 
class ThreeRoomApartament : public OneRoomApartment
{
public:
  ThreeRoomApartament(int floor,Kitchen kitchen,LivingRoom livingRoom1,LivingRoom livingRoom2,LivingRoom livingRoom3)
  :OneRoomApartment(floor,kitchen,livingRoom1)
  {
    FLivingRoom2 = new LivingRoom(livingRoom2);
    FLivingRoom3 = new LivingRoom(livingRoom3);
  }
  ~ThreeRoomApartament(void)
  {
    delete FLivingRoom2;
    delete FLivingRoom3;
  }
  friend ostream& operator<<(ostream& os,const ThreeRoomApartament& apartament)
  {
    //TODO
  }
private:
  LivingRoom* FLivingRoom2;
  LivingRoom* FLivingRoom3;
};
 
int main(void)
{
  OneRoomApartment OneRoom(5,(Kitchen)25,(LivingRoom)36);
  cout << OneRoom;
 
  ThreeRoomApartament ThreeRoom(3,(Kitchen)16,(LivingRoom)18,(LivingRoom)28,(LivingRoom)38);
  cout << ThreeRoom;
 
  getch();
  return 0;
}
Извини дописать не успел
ПОжалуйста, напишите пояснение этому коду кто-нибудь.
0
BornLeader
53 / 49 / 9
Регистрация: 16.05.2008
Сообщений: 162
27.03.2009, 21:31 #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
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <conio.h>
using namespace std;
 
class BaseRoom    // базовый класс (кухня тоже комната)
{
public:
  BaseRoom(int square):m_nSquare(square){}  // конструктор
  BaseRoom(const BaseRoom& baseroom)        // копирующий конструктор
  {
    m_nSquare = baseroom.GetSquare();
  }
  virtual ~BaseRoom(void){}  // деструктор 
  int GetSquare(void)const{return m_nSquare;} // возващает значение площади
protected:
  int m_nSquare; // свойство 'площадь' общее для всех помещений не важно кухня или спальная комната
};
 
class LivingRoom : public BaseRoom // класс комнаты наследует интефейс и свойства от базового класса
{
public:
  LivingRoom(int square):BaseRoom(square){} // конструктор
  virtual ~LivingRoom(void){} // деструктор 
};
 
class Kitchen : public BaseRoom // класс кухни наследует интефейс и свойства от базового класса
{
public:
  Kitchen(int square):BaseRoom(square){} // конструктор
  virtual ~Kitchen(void){} // деструктор 
};
 
class OneRoomApartment // класс однокомнатной квартиры
{
public:
  OneRoomApartment(int floor,Kitchen kitchen,LivingRoom livingRoom) // конструктор
  :m_nFloor(floor)
  {
    FKitchen = new Kitchen(kitchen); // создаем объекты кухня и комната
    FLivingRoom = new LivingRoom(livingRoom);
  };
  friend ostream& operator<<(ostream& os,const OneRoomApartment& apartament) //перегрузка оператора '<<' 
  {
    return os << "floor: " << apartament.m_nFloor << endl
              << "kitchen square: " << apartament.FKitchen->GetSquare() << endl
              << "livingRoom square: " << apartament.FLivingRoom->GetSquare() << endl;
  }
  virtual ~OneRoomApartment(void) // деструктор 
  {
    delete FKitchen; // уничтожаем объекты кухня и комната
    delete FLivingRoom;
  };
protected:
  int m_nFloor;     //свойство 'этаж' 
  Kitchen* FKitchen;//указатель на объект кухня
  LivingRoom* FLivingRoom;//указатель на объект комната
};
 
class ThreeRoomApartament : public OneRoomApartment // класс трехкомнатной квартиры наследник от класса однокомнатной квартиры
{
public:
  ThreeRoomApartament(int floor,Kitchen kitchen,LivingRoom livingRoom1,LivingRoom livingRoom2,LivingRoom livingRoom3)
  :OneRoomApartment(floor,kitchen,livingRoom1)
  {
    FLivingRoom2 = new LivingRoom(livingRoom2);
    FLivingRoom3 = new LivingRoom(livingRoom3);
  }
  ~ThreeRoomApartament(void)
  {
    delete FLivingRoom2;
    delete FLivingRoom3;
  }
  friend ostream& operator<<(ostream& os,const ThreeRoomApartament& apartament)
  {
    return os << "floor: " << apartament.m_nFloor << endl
              << "kitchen square: " << apartament.FKitchen->GetSquare() << endl
              << "livingRoom1 square: " << apartament.FLivingRoom->GetSquare() << endl
              << "livingRoom2 square: " << apartament.FLivingRoom2->GetSquare() << endl
              << "livingRoom3 square: " << apartament.FLivingRoom3->GetSquare() << endl;
  }
private:
  LivingRoom* FLivingRoom2;
  LivingRoom* FLivingRoom3;
};
 
int main(void)
{
  OneRoomApartment OneRoom(5,(Kitchen)25,(LivingRoom)36);
  cout << OneRoom;
 
  ThreeRoomApartament ThreeRoom(3,(Kitchen)16,(LivingRoom)18,(LivingRoom)28,(LivingRoom)38);
  cout << ThreeRoom;
 
  getch();
  return 0;
}
0
prikolist
3 / 3 / 1
Регистрация: 19.07.2008
Сообщений: 142
28.03.2009, 10:50  [ТС] #7
Спасибо за помощь, я попробую разобраться.
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
28.03.2009, 14:08 #8
BornLeader, а зачем у тебя во всех классах виртуальные деструкторы? В чем соль?
0
BornLeader
53 / 49 / 9
Регистрация: 16.05.2008
Сообщений: 162
30.03.2009, 11:56 #9
А соль в том чтобы создавалась виртульная таблица методов. А деструкторы базового класса обязанны быть виртуальными чтобы при разрушении объекта был вызван деструктор и базового класса в том числе,а иначе память выделеная в при вызове конструктора базового класса не будет освобожденна.
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 12:21 #10
BornLeader, на сколько я знаю, деструктор базового класса и так вызывается после удаления производного класса, для этого ему не обязательно быть виртуальным...
Может они необходимы для того, чтобы в производных классах обязательно их переопределять?
0
BornLeader
53 / 49 / 9
Регистрация: 16.05.2008
Сообщений: 162
30.03.2009, 14:41 #11
Haster, обсолютно согласен. Просто данный пример можно развивать до бесконечности.

Добавлено через 59 минут 33 секунды
Haster, обсолютно с тобой согласен, но вот см.код:
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
#include <iostream>
using namespace std;
 
class Base
{
public:
  Base(void){cout << "Base::Base" << endl;}
  ~Base(void){cout << "Base::~Base" << endl;}
};
 
class Child : public Base
{
public:
  Child(void):Base(){cout << "Child::Child" << endl;}
  ~Child(void){cout << "Child::~Child" << endl;}
};
 
int main(void)
{
  Child* child = new Child; //тут ты прав на все 100
  delete child;
 
  Base* base = new Child; // а вот тут кроется лажа, и спасти может только виртуальный деструктор базового класса
  delete base;
  return 0;
}
1
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.03.2009, 14:46 #12
BornLeader, большое спасибо, теперь понял ))
А то уже давно занозой сидит этот вопрос
0
prikolist
3 / 3 / 1
Регистрация: 19.07.2008
Сообщений: 142
30.03.2009, 15:02  [ТС] #13
Прошу извенения. Я уточнил, мне нужно создать класс квартира, а не комната, там опечатка в условии. Может кто-нибудь сможет немного накинуть,желательно чтоб код был с коментарием. Ещё раз пишу условие, какое мне дали.

Код
Создать класс квартира, имеющий площадь, определенное число комнат, этаж. Определить конструктор, деструктор и методы доступа( чтения и записи) полей класса. 
Создать два производных класса:
1)	Класс - однокомнатная квартира, содержащий комнату и кухню (ее площадь).
2)	Класс – трехкомнатная квартира, содержащий 3 комнаты (их площади), кухню (ее площадь).
Определить конструкторы, деструкторы, методы доступа(чтения и записи) площади, этажности, количества комнат однокомнатной и трехкомнатной квартиры. 
Создать экземпляры объектов всех классов.
В методах доступа к данным класса предусмотреть вывод сообщений поясняющих, метод какого класса вызывается
0
BornLeader
53 / 49 / 9
Регистрация: 16.05.2008
Сообщений: 162
30.03.2009, 15:44 #14
prikolist, ну а чем тебе предыдущее решение не подходит?
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 133
Регистрация: 07.03.2007
Сообщений: 10,802
Завершенные тесты: 1
30.03.2009, 15:55 #15
prikolist, вам дали вариант, как описать комнату, вы уж как-то по аналогии напрягитеьс и сделайте комнату, а плодить однотипных тем не надо
1
30.03.2009, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2009, 15:55
Привет! Вот еще темы с решениями:

Создать класс авиадвигатель, имеющий мощность
Композиция и иерархия Создать класс авиадвигатель, имеющий мощность....

Создать класс колесо, имеющий радиус
Создать класс колесо, имеющий радиус. Определить конструкторы и методы доступа....

Создать класс Человек, имеющий имя, возраст
Здравствуйте! Не могли бы Вы помочь мне сделать вот эту задачу: Создать...

Создать класс «Квадрат», имеющий длину стороны
Прошу помочь заранее спасибо! Создать класс «Квадрат», имеющий длину...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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