Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2009, 23:50   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
Плохо Дать немного коментария по коду

Здравсвуйте программисты! Дайте пожалуйста коментарий, желательно подробнее,что делается в этом коде, и правильно ли он написан, согласно вот этому условию. Также должен быть вывод результата в нём,так сказал мне преподаватель.

Код:
Создать класс комната, имеющий площадь, определенное число комнат, этаж. Определить конструктор, деструктор и методы доступа( чтения и записи) полей класса. 
Создать два производных класса:
1)	Класс - однокомнатная квартира, содержащий комнату и кухню (ее площадь).
2)	Класс – трехкомнатная квартира, содержащий 3 комнаты (их площади), кухню (ее площадь).
Определить конструкторы, деструкторы, методы доступа(чтения и записи) площади, этажности, количества комнат однокомнатной и трехкомнатной квартиры. 
Создать экземпляры объектов всех классов.
В методах доступа к данным класса предусмотреть вывод сообщений поясняющих, метод какого класса вызывается

Вот код, ниже, дайте пожалуйста ему максимальное пояснение,так как очень нужно, это нужно будет мне обяснить преподавателю, просто не всё здесь мне ясно,что делается.Заранне благодарен за ответ.

Код:
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
using namespace std;

class Room
{
protected:
double square;     //Площадь
int count_room;   //Количество комнат
int floor;       //Этаж


public:
Room(): square(0), count_room(0), floor(0) {}
Room(double sqr, int count, int flr): square(sqr), count_room(count), floor(flr) {}
~Room() {}

void SetRoomCount(int count) { count_room = count; }
void SetRoomSquare(double sqr) { square = sqr; }
void SetRoomFloor(int flr) { floor = flr; }

int GetRoomCount()const { return count_room; }
double GetRoomSquare()const { return square; }
int GetRoomFloor()const { return floor; }
};

class OneRoom: public Room
{
private:
double square_kitchen;

public:
OneRoom(): square_kitchen(0) { Room(); count_room = 1; }
OneRoom(double sqr, int flr, double sqr_kitchen) { Room(sqr, 1, flr); square_kitchen = sqr_kitchen; }

void SetRoomCount()const {}
void SetKitchenSquare(double sqr) { square_kitchen = sqr;  }
double GetKitchenSquare()const { return square_kitchen; }
};


class ThreeRoom: public OneRoom
{
public:
ThreeRoom() { OneRoom(); count_room = 3; }
ThreeRoom(double sqr, int flr, double sqr_kitchen) { OneRoom(sqr, flr, sqr_kitchen); }
};


main()
{
getch();
}
prikolist вне форума Ответить с цитированием
Старый 15.05.2009, 00:48   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Написано не совсем верно.
Вот.

Код:
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
using namespace std;

class Room
{
protected:
double square;     //Площадь
int count_room;   //Количество комнат
int floor;       //Этаж


public:
// инициализируем поля нулями
Room(): square(0), count_room(0), floor(0) {}
// а если есть аргументы, то аргументами
Room(double sqr, int count, int flr): square(sqr), count_room(count), floor(flr) {}
~Room() {}

// функция установки количества комнат
void SetRoomCount(int count) { count_room = count; }
// ...площади
void SetRoomSquare(double sqr) { square = sqr; }
// и этажа
void SetRoomFloor(int flr) { floor = flr; }

// возвращает количество комнат
int GetRoomCount()const { return count_room; }
// ...площадь
double GetRoomSquare()const { return square; }
// ... этаж
int GetRoomFloor()const { return floor; }
};

class OneRoom: public Room
{
private:
double square_kitchen;

public:
// конструктор. Вызываем конструктор предка и инициализируем остальные поля
OneRoom(): Room() { square_kitchen=0; count_room = 1; }
OneRoom(double sqr, int flr, double sqr_kitchen):  Room(sqr, 1, flr)
  { square_kitchen = sqr_kitchen;  }

void SetRoomCount()const {}
void SetKitchenSquare(double sqr) { square_kitchen = sqr;  }
double GetKitchenSquare()const { return square_kitchen; }
};


class ThreeRoom: public OneRoom
{
public:
ThreeRoom() : OneRoom() { count_room=3; }
ThreeRoom(double sqr, int flr, double sqr_kitchen) : OneRoom(sqr, flr, sqr_kitchen) { count_room=3;}
};


int main()
{
// ну а это пример
 ThreeRoom A(12, 1, 13);
 cout<<A.GetRoomSquare()<<endl;
 cout<<A.GetKitchenSquare();

getch();
}
Не знаю, что тут еще можно прокомментировать. По-моему, все предельно понятно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.05.2009, 11:30   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо. Скажите,а всё ли описанно в функции main() или нужно,ещё что-то добавить? И ещё, зачем в классе class ThreeRoom,после слова public: пишется OneRoom() , а затем ниже в конструкторе ThreeRoom(double sqr, int flr, double sqr_kitchen) опять пишется OneRoom(sqr, flr, sqr_kitchen) { count_room=3;} и парметры у них одинаковые?
prikolist вне форума Ответить с цитированием
Старый 15.05.2009, 13:45   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Скажите,а всё ли описанно в функции main() или нужно,ещё что-то добавить?
Так что напишете, то и будет. Вам ведь класс нужно было написать. А в main'е пример использования (может, и не нужно).
Цитата:
И ещё, зачем в классе class ThreeRoom,после слова public: пишется OneRoom()
Наследуем от класса OneRoom
Цитата:
а затем ниже в конструкторе ThreeRoom(double sqr, int flr, double sqr_kitchen) опять пишется OneRoom(sqr, flr, sqr_kitchen) { count_room=3;} и парметры у них одинаковые?
Вызываем конструктор предка, чтобы инициализировать наследованные поля.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.05.2009, 16:38   #5
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Для чего вот этот конструктор { OneRoom(sqr, flr, sqr_kitchen); }, находится в этой строке
Код:
 ThreeRoom(double sqr, int flr, double sqr_kitchen) : OneRoom(sqr, flr, sqr_kitchen) { count_room=3;}
Что, в что записывается в данной строке?

Последний раз редактировалось prikolist; 15.05.2009 в 16:40.
prikolist вне форума Ответить с цитированием
Старый 15.05.2009, 16:49   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
ThreeRoom(double sqr, int flr, double sqr_kitchen) : OneRoom(sqr, flr, sqr_kitchen) { count_room=3;}
Конструктор ThreeRoom получает 3 аргумента. Сам класс имеет 3 наследованных поля (от OneRoom). Чтобы их инициализировать мы вызываем конструктор OneRoom и передаем ему аргументы, переданные в ThreeRoom. И еще дополнительно инициализируем поле count_room значением 3.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.05.2009, 17:38   #7
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

А что будет если в этой строке
Код:
public:
ThreeRoom() : OneRoom() { count_room=3; }
убрать OneRoom()
А записать так:
Код:
class ThreeRoom: public OneRoom
{
public:
ThreeRoom() : { count_room=3; }
ThreeRoom(double sqr, int flr, double sqr_kitchen) : OneRoom(sqr, flr, sqr_kitchen) { count_room=3;}
};
prikolist вне форума Ответить с цитированием
Старый 15.05.2009, 17:40   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
А что будет если в этой строке убрать OneRoom()
Ничего хорошего
Просто тогда все поля, кроме count_room останутся непроинициализированными.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.05.2009, 18:16   #9
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

А в выражении
Код:
ThreeRoom() : OneRoom() { count_room=3; }
OneRoom() - это вызов класса, для того,чтоб во 2 строке, воспользоваться парметрами этого класса?

Последний раз редактировалось prikolist; 15.05.2009 в 18:18.
prikolist вне форума Ответить с цитированием
Старый 15.05.2009, 18:20   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот это:
Код:
ThreeRoom() : OneRoom() { count_room=3; }
ThreeRoom(double sqr, int flr, double sqr_kitchen) : OneRoom(sqr, flr, sqr_kitchen) { count_room=3;}
два разных конструктора. Первый - без аргументов, второй - с аргументами. Вызвать можно как первый, так и второй. Они независимы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комментарии к коду ELL Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 09.03.2009 16:01
как листу дать имя owl-ka Microsoft Office Excel 8 25.11.2008 21:29
Как не дать разъединиться с Инетом Crazyman Работа с сетью в Delphi 2 04.03.2008 00:12
Комментарии к коду Juhn Паскаль, Turbo Pascal, PascalABC.NET 6 24.12.2007 20:29
Комментарии к коду Ярослав Помощь студентам 4 23.11.2007 16:57