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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.90
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

ООП - C++

21.06.2010, 03:02. Просмотров 2848. Ответов 26
Метки нет (Все метки)

Привет всем, народ дайте какую-нибудь интересную задачку на ООП, (однообразные задачи из учебников достали уже), чтоб она затрагивала как можно больше тем ООП (можно сказать итоговая задача по разделу ООП), и чтоб ее можно было решить на консоли. (Морской бой не предлагать, этот пример разбирал в учебнике). Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2010, 03:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ООП (C++):

ООП - C++
наследование - понятно агрегация - понятно использование - не понятно. что такое использование? спасибо.

C++ ООП - C++
Просьба дать какую-нибудь интересную программу, дабы теста на курс ООП. Чтобы не из книжки, а реально придуманная про программистом, или...

ООП - C++
1) Для класса символьной строки определить отношение лексикографического порядка, перегрузив с помощью дружественной функции операцию «<» ...

ооп - C++
Нада книгу по ооп, такую что бы было все разжевано максимально. Так, что бы я за минимум времени и усилий разобрался.

ООП на С++ - C++
Помогите пожалуйста!! Не понимаю как это сделать(( Создать программу с классом Student порождающий обьекты - данные об студентах...

ООП - C++
Всем привет! Если можно, не могли бы вы ответить на пару вопросов по ООП, а то что-то не могу понять. Вопросы: Зачем используются такие...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Evg
Эксперт CАвтор FAQ
17630 / 5854 / 376
Регистрация: 30.03.2009
Сообщений: 16,141
Записей в блоге: 26
22.06.2010, 22:17 #16
_Eldar_, могу подкинуть немного другую идею. Попробуй разбить свою программу на две части: игровой движок (который отвечает за внутреннее состояние игры) и ui - пользовательский интерфейс (та часть, которая непосредственно будет взаимодействовать с игроком). В качестве проверки правильности можешь попробовать на один и тот же движок привинтить два разных ui: один консольный, другой графический. На мой взгляд это будет очень полезный опыт
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
23.06.2010, 01:16  [ТС] #17
rangerx, Коментарии я начал писать (хватило только на первые три строки)
Цитата Сообщение от rangerx Посмотреть сообщение
2) Зачем вообще этому всему быть открытым?
У меня эти элементы находятся в private:
std::vector<int> arr;
int num_X;
int step;
Про магические числа - можно было конечно все сделать через именнованные константы, но не думаю что правилы игры в пятнашки будут меняться.
По поводу векторов - а чем бы воспользовался? А в целом спасибо за критику.
Всем остальным - ну раз пятнашки, шашки не ООП, так предложите такую задачу чтоб была ООП и ее можно было решить в КОНСОЛИ.

Добавлено через 17 минут
Mr.X, Да гораздо удобнее
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
23.06.2010, 01:37 #18
_Eldar_, подойдите к вопросу глобальнее, сделайте к примеру учёт зверюшек в зоопарке... Общий класс - живность с характерным для всех свойством - время жизни. От него подклассы - млекопитающие, птицы, земноводные, рыбы... У каждого свои свойства: у птиц к примеру размах крыльев...
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
23.06.2010, 01:43  [ТС] #19
easybudda, Хорошо, зоопарк я опишу, а что будет программа выполнять?

Добавлено через 1 минуту
Ну есть у меня куча зверей - просто выводить их количество и возраст к пимеру?

Добавлено через 2 минуты
добавление и удаление зверей в парк
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
23.06.2010, 01:50 #20
_Eldar_, ну к примеру, сколько в день нужно жрачки всем млекопитающим, или сколько аквариумов нужно для рыб при учёте, что одна рыбина сожрёт другую, если та в три раза меньше... Ну или прирост поголовья пингвинов вычислять и общий процент их от нелетающих птиц...

Добавлено через 4 минуты
Цитата Сообщение от _Eldar_ Посмотреть сообщение
добавление и удаление зверей в парк
Ну это само собой, без этого ни одна "база данных" не обходится, вот вычурные поиски и сортировки по ним делать - по-моему интереснее...
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
23.06.2010, 01:51  [ТС] #21
easybudda, ок, в этот раз торопиться не буду) основательно подойду.
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
25.06.2010, 03:44  [ТС] #22
easybudda,

Что то у меня совсем туго стало со свободным временем , Вообщем не стал делать никакие менюшки, сделал все поминиму. Принимаю критику (по файлам Zoo.h и Zoo.cpp по Main.cpp сам понимаю что все криво написано)

файл Zoo.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
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
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <windows.h>
 
 
// базовый класс Animal
class Animal{
protected:
    std::string name;  // название
    int    limit_life; // продолжительность жизни
    double weight;     // вес
public:
    Animal(std::string, int, double); // конструктор
    Animal(); // конструктор по умолчанию
    std::string GetName(void) const {return name;} 
    int         GetLimitLife(void) const {return limit_life;}
    double      GetWeight(void) const {return weight;}
};
 
// производный класс Bird от Animal
class Bird: public Animal{
private:
    double   wing_span; // размах крыльев   
    std::string   flying;    // летающий?
public:
    Bird(std::string, int, double ,double , std::string);// конструктор
    Bird();   // конструктор по умолчанию
    double GetWingSpan(void) const {return wing_span;}
    std::string GetFlying(void) const {return flying;}  
    friend std::ostream& operator << (std::ostream&, Bird&);
    friend std::istream& operator >> (std::istream&, Bird&);
    friend std::ofstream& operator << (std::ofstream&, Bird&);
    friend std::ifstream& operator >> (std::ifstream&, Bird&);
};
 
// производный класс Fish от Animal
class Fish: public Animal{
private:
    std::string type_fish; // тип, речная или морская
    int count_fin;    // количество плавников
public:
    Fish(std::string, int, double , std::string, int); // конструктор
    Fish(); // конструктор по умолчанию
    std::string GetTypeFish(void) const {return type_fish;}
    int GetCountFin(void) const {return count_fin;}
    friend std::ostream& operator << (std::ostream&, Fish&);
    friend std::istream& operator >> (std::istream&, Fish&);
    friend std::ofstream& operator << (std::ofstream&, Fish&);
    friend std::ifstream& operator >> (std::ifstream&, Fish&);
};
файл Zoo.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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "Zoo.h"
 
using namespace std;
 
//////////////////////////////////////////////////////////////
// базовый класс Animal
 
//конструктор
Animal::Animal(string _name, int _limit_life, double _weight):
    name(_name), limit_life(_limit_life), weight(_weight){
    //cout << "Конструктор Animal" << endl;
} 
 
//конструктор по умолчанию
Animal::Animal(): name("Неизвестно"), limit_life(0), weight(0){
    //cout << "Конструктор Animal по умолчанию" << endl;
}
 
//////////////////////////////////////////////////////////////
// производный класс Bird от Animal
 
//конструктор
Bird::Bird(string _name, int _limit_life, double _weight ,double _wing_span, string _flying):
Animal(_name, _limit_life, _weight), wing_span(_wing_span), flying(_flying){
    //cout << "Конструктор Bird" << endl;
}
 
//конструктор по умолчанию
Bird::Bird(): wing_span(0), flying("Неизвестно"){
    //cout << "Конструктор Bird по умолчанию" << endl;
}
 
/////////////////////////////////////////////////////////////
// производный класс Fish от Animal
 
// конструктор
Fish::Fish(string _name, int _limit_life, double _weight , string _type_fish, int _count_fin) :
Animal(_name, _limit_life, _weight), type_fish(_type_fish), count_fin(_count_fin){
    //cout << "Конструктор Fish" << endl;
}; 
 
//конструктор по умолчанию
Fish::Fish() : type_fish("Неизвестно"), count_fin(0){
    //cout << "Конструктор Fish по умолчанию" << endl;
}
 
/////////////////////////////////////////////////////////////
// переопределение операций сдвига (Класс Bird)
ostream& operator << (ostream& out, Bird& obj){
    return out 
        << "Название:                " << left << obj.name << endl
        << "Продолжительность жизни: " << left << obj.limit_life << endl
        << "Вес                      " << left << obj.weight << endl
        << "Размах крыльев:          " << left << obj.wing_span << endl
        << "Летающий:                " << left << obj.flying << endl;
}
 
istream& operator >> (istream& in, Bird& obj){
    cout << "Введите:" << endl;
    cout << "\nНазвание - ";              in >> obj.name;
    cout << "Продолжительность жизни - "; in >> obj.limit_life;
    cout << "Вес - ";                     in >> obj.weight;
    cout << "Размах крыльев - ";          in >> obj.wing_span;
    cout << "Летающий - ";                in >> obj.flying;
    cout << endl;
    return in; 
}
 
ofstream& operator << (ofstream& out, Bird& obj){
    out << obj.name       << " " 
        << obj.limit_life << " " 
        << obj.weight     << " " 
        << obj.wing_span  << " " 
        << obj.flying     << endl;
    return out;
}
 
ifstream& operator >> (ifstream& in, Bird& obj){
    in >> obj.name >> obj.limit_life >> obj.weight >> obj.wing_span >> obj.flying;
    return in; 
}
 
/////////////////////////////////////////////////////////////
// переопределение операций сдвига (Класс Fish)
ostream& operator << (ostream& out, Fish& obj){
    return out 
        << "Название:                " << left << obj.name       << endl
        << "Продолжительность жизни: " << left << obj.limit_life << endl
        << "Вес                      " << left << obj.weight     << endl
        << "Тип рыбы:                " << left << obj.type_fish  << endl
        << "Кол-во плавников:        " << left << obj.count_fin  << endl;
}
 
istream& operator >> (istream& in, Fish& obj){
    cout << "Введите:" << endl;
    cout << "Название:                "; in >> obj.name;
    cout << "Продолжительность жизни: "; in >> obj.limit_life;
    cout << "Вес:                     "; in >> obj.weight;
    cout << "Тип рыбы:                "; in >> obj.type_fish;
    cout << "Кол-во плавников:        "; in >> obj.count_fin;
    cout << endl;
    return in; 
}
 
ofstream& operator << (ofstream& out, Fish& obj){
    out << obj.name       << " " 
        << obj.limit_life << " " 
        << obj.weight     << " " 
        << obj.type_fish  << " " 
        << obj.count_fin     << endl;
    return out;
}
 
ifstream& operator >> (ifstream& in, Fish& obj){
    in >> obj.name >> obj.limit_life >> obj.weight >> obj.type_fish >> obj.count_fin;
    return in; 
}
файл Main.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "Zoo.h"
 
using namespace std;
 
int main(){
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "Программа запущена" << endl;
    
    ifstream fin("birds.txt");
    if(!fin){
        cout << "Файл birds.txt не найден" << endl;
        system("pause");
        return 1;
    }
 
    vector<Bird> bird ;
 
    while(!fin.eof()){
        Bird temp;
        fin >> temp;
        bird.push_back(temp);
    }
 
    cout << "Птицы зоопарка: " << endl; 
    vector<Bird>::iterator i;
    for(i = bird.begin(); i != bird.end(); ++i){
        cout << "==============================" << endl;
        cout << *i;
    }
 
    cout << "\n/****************************************/\n" << endl;
    cout << "Нелетающие птицы" << endl;
    for(i = bird.begin(); i != bird.end(); ++i){        
        if (i->GetFlying() == "Нет"){
            cout << "==============================" << endl;
            cout << *i;
        }
    }
 
    cout << "\n/****************************************/\n" << endl;
    cout << "Птицы, вес которых > 60 кг" << endl;
    for(i = bird.begin(); i != bird.end(); ++i){        
        if (i->GetWeight() > 60){
            cout << "==============================" << endl;
            cout << *i;
        }
    }
    
    cout << endl;
    system("pause");
    return 0;
}
файл birds.txt
Альбатрос 45 68 50 Да
Пингвин 30 15 10 Нет
Чайка 5 3 21 Да
Страус 100 150 60 Нет
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
25.06.2010, 04:20 #23

Не по теме:

Цитата Сообщение от _Eldar_ Посмотреть сообщение
Что то у меня совсем туго стало со свободным временем
А так всегда бывает. Появится время, думаешь - ну сейчас чем-нибудь полезно-образовательным займусь... Ага, щас! Только начнёшь - тут же как прорывает всех!



_Eldar_, с виду вроде похоже на правду, только я бы в самом классе Animal чисто виртуальный метод прописал (например возвращающий строкой способ размножения, а лучше объявленной констанотой), чтобы нельзя было объект типа "неведома зверушка" создать, а функции, возвращающие значения полей правильнее константными делать...
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
25.06.2010, 04:39 #24
Цитата Сообщение от _Eldar_ Посмотреть сообщение
rangerx, Коментарии я начал писать (хватило только на первые три строки)
Вот как раз эти три строки комментировать было не обязательно(см. мой предыдущий пост).

Цитата Сообщение от _Eldar_ Посмотреть сообщение
У меня эти элементы находятся в private:
Вообще-то я о том, что находится в функции main.

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

Цитата Сообщение от _Eldar_ Посмотреть сообщение
По поводу векторов - а чем бы воспользовался?
Нет, ну можно и вектор использовать конечно... Просто интересно зачем понадобился вектор в программе, где число хранимых в нём элементов константно, и его функционал не используется вовсе? Почему не использовать простой массив? И в функции Validate_End... Зачем копировать один вектор в другой, а потом это всё сортировать и сравнивать элементы этих векторов? Не проще сделать что-то вроде
C++
1
2
for(int i = 0; i < size-1; ++i)
   if(array[i] != i+1) ...
?
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
25.06.2010, 04:53  [ТС] #25
easybudda,
а функции, возвращающие значения полей правильнее константными делать...
Так у меня и так эти методы константые:
C++
1
 std::string GetName(void) const {return name;}
С чисто виртуальными методами я еще не баловался(только читал), как появиться время попробую

Не по теме:


Как перевести объект типа string в верхний регистр средствами?



Добавлено через 39 секунд

Не по теме:

средствами С++

rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
25.06.2010, 05:08 #26
Цитата Сообщение от _Eldar_ Посмотреть сообщение
Не по теме:
Как перевести объект типа string в верхний регистр средствами C++?

Не по теме:

C++
1
std::transform(str.begin(), str.end(), str.begin(), toupper);

_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
25.06.2010, 05:42  [ТС] #27
easybudda, Попробовал добавить виртуальный метод

метод в классе Animal:
C++
1
virtual void method_multiplication() = 0;
метод в классе Bird:
C++
1
void method_multiplication(){std::cout << "Размножаются яйцами:)" << std::endl;}
метод в классе Fish:
C++
1
void method_multiplication(){std::cout << "Размножаются икрой:)" << std::endl;}
C++
1
Bird* bird("Альбатрос", 45, 68, 50, "Да")
Не пойму почему не компилится((, почему нельзя так вызывать конструктор? Я сделал немного по другому:


файл Main.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
#include "Zoo.h"
 
using namespace std;
 
int main(){
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "Программа запущена" << endl;
 
    Bird temp_1("Альбатрос", 45, 68, 50, "Да");
    Fish temp_2("Акула", 45, 68, "Морская", 6);
 
    Bird* bird = &temp_1;
    Fish* fish = &temp_2;
 
    Bird* temp_3("Альбатрос", 45, 68, 50, "Да");
 
    bird->method_multiplication();
    fish->method_multiplication();
    
    cout << endl;
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2010, 05:42
Привет! Вот еще темы с ответами:

по ООП . - C++
Помогите пожалуйтса с решением задач ! на С++ 1.Дана неубывающая последовательность действительных чисел. Вставить в неё...

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

ООП - C++
Прочитал в википедии про ООП, но так толком и не понял. Подскажите, чем является создание программ с интерфейсом, допустим как калькулятор...

ООП - C++
Создать класс Vegetable, содержащий следующие элементы: - поле «вес» float Mass; - поле «зрелость» int Ripeness; - метод получения...


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

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

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