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

ООП пример - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Anti55
-67 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 56
13.06.2013, 19:50     ООП пример #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
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
 
 
class CClass  //объявили класс
{
  double a;
  int b[5];  // целочисленный массив из пяти значений
public:
      CClass(){a=0;b[0]=b[1]=b[2]=b[3]=b[4]=0;} //конструктор
      ~CClass(){};                                           // деструктор
void SetA(double a){this->a=a;};  //а тут вообще не понял, типа функция А, значению а присволи метод а 
void SetB(int b,int i)                                            //функция В
{this->b[i]=b;};
  void Print(){                                       //открыли функцию Print для видимости значений
  cout<<a<<" "<<b[0]<<" "<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;
  };
 
 void Set(){
   cin>>a>>b[0]>>b[1]>>b[2]>>b[3]>>b[4];// надо ввести с клавы значения
   };
   };
     void main()
     {
      system("pause");
         return;
     }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 19:50     ООП пример
Посмотрите здесь:

C++ ООП
ООП на С++ C++
C++ по ООП .
ООП C++
C++ ООП
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kolobych
7 / 7 / 0
Регистрация: 07.05.2013
Сообщений: 17
13.06.2013, 20:04     ООП пример #2
Сейчас сделаю.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
13.06.2013, 20:06     ООП пример #3
Цитата Сообщение от Anti55 Посмотреть сообщение
CClass(){a=0;b[0]=b[1]=b[2]=b[3]=b[4]=0;} //конструктор
Цитата Сообщение от Anti55 Посмотреть сообщение
~CClass(){}; * * * * * * * * * * * * * * * * * * * * * // деструктор
Цитата Сообщение от Anti55 Посмотреть сообщение
cout<<a<<" "<<b[0]<<" "<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;
Цитата Сообщение от Anti55 Посмотреть сообщение
void Set(){
* *cin>>a>>b[0]>>b[1]>>b[2]>>b[3]>>b[4];// надо ввести с клавы значения
* *};
Цитата Сообщение от Anti55 Посмотреть сообщение
cin>>a>>b[0]>>b[1]>>b[2]>>b[3]>>b[4];// надо ввести с клавы значения
Цитата Сообщение от Anti55 Посмотреть сообщение
void main()
вас правда так учат или это ваши додумки?

Ключевое слово this указывает на текущий объект, т.е. на тот, с которым оперируем. Если пишем this->a, значит обращаемся к свойству текущего объекта а. В set-методе идет обычное присвоение свойству значения переданного аргумента.
Anti55
-67 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 56
13.06.2013, 20:17  [ТС]     ООП пример #4
Цитата Сообщение от MrGluck Посмотреть сообщение
вас правда так учат или это ваши додумки?
А что собственно не так? То что было на доске, то и записал. Только свет светил на доску и я плохо смог записать.
kolobych
7 / 7 / 0
Регистрация: 07.05.2013
Сообщений: 17
13.06.2013, 20:29     ООП пример #5
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
#include <iostream>
using namespace std;
  
class CClass  //объявили класс
{
    double a;
    int b[5];
    public:
        CClass(){
            a=0;
            for (int i=0; i<5; i++) b[i] = 0;
        } 
 
        ~CClass(){
            delete [] b;
        }
 
        void SetA(double a){
            this->a = a;
        }
        void SetB(int h, int n){
            for(int i=0; i<n; i++){
                this->(b+i) = h[i];
            }
        }
        void Print(){
            cout << a <<" "<<b[0]<<" "<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;
        }
 
        void Set(){
            cin >> this->a;
            for(int i=0; i<5; i++){
                cin >> this->b[i];
            }
        }
};
    void main(){
 
        system("pause");
        return;
    }
Но это все мусор и хлам. cin и cout работать в классе тут не будут. Да и вся прога корявая. У вас учитель какой то странный...
А в общем почти все учителя туфту несут. Больше толку если учить самому.
Anti55
-67 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 56
13.06.2013, 20:47  [ТС]     ООП пример #6
Ошибка при компиляции: this->(b+i) = h[i]; member identifier expected(Ожидается идентификатор пользователя). И вот ,"Если пишем this->a, значит обращаемся к свойству текущего объекта а. ", а так не проще - а=а?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
13.06.2013, 21:07     ООП пример #7
Цитата Сообщение от Anti55 Посмотреть сообщение
А что собственно не так? То что было на доске, то и записал.
это же феерический ***

1) список инициализации в конструкторе придумали не просто так
2) инициализировать весь массив 0 нет смысла т.к. достаточно проинициализировать лишь один элемент, остальные заполнятся 0 по дефолту
3) размер массива надо хранить где-то, например в поле
C++
1
enum {N = 5 };
Иначе
а) этот magic number ни разу не очевиден
б) изменения в одной части не повлекут изменений в другой
в) гарантия, что не выйдем за пределы массива без особых ухищрений
4) деструктор тут не нужен, дефолтный точь в точь такой же
5) параметры в set функции должны быть константными
6) метод print должен быть константным
7) названия у функций обычно пишут с маленькой буквы
8) раздельное объявление и реализация повысят читаемость кода в разы
9) ; после описания функций не ставят
10) циклы придумали вовсе не глупые люди
11) system определена в cstdlib
12) vlc.h тут не нужен
13) void main - зло, стандарт его не одобряет
14) set-методы, как правило, лишь принимают значения и инициализируют ими свойства
15) нет проверки выхода за границы массива в методе SetB.
16) return в конце void функции это ок, да
Anti55
-67 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 56
13.06.2013, 21:30  [ТС]     ООП пример #8
Всё подробно и понятно. Ещё раз нажму "спасибо". Я так думаю - это он абстрактный пример привёл. Ну мы его просили один из примеров задания решить, и он не стал в открытую писать код. Я тут попытался сам, но что-то с окончанием не твк...
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
#include <iostream.h>
 
 class CClass{
  int x;
         public:
                 int get_x(){return x;}
  int main()
  {
      int a=0,b=0,c=0,d=0,y=0;
         CClass mas[5]={a,b,c,d,y};
 
            cout<<"a:"<<a;
              cin>>a;
            cout<<"b:"<<b;
              cin>>b;
            cout<<"c:"<<c;
              cin>>c;
            cout<<"d:"<<d;
              cin>>d;
            cout<<"y:"<<y;
              cin>>y;
 
      for(int i=0;i<5;i++)
      {
      cout<<i<<endl;
      system("pause");
      }
  return 0;
 }
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
13.06.2013, 21:38     ООП пример #9
Вот пример:
Film.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
#ifndef _FILM_H
#define _FILM_H_
#include <string>
#include <vector>
 
typedef std::vector<std::string> vec_str;
typedef std::vector<std::string>::iterator vec_str_it;
typedef std::vector<std::string>::const_iterator vec_str_cit;
 
 
class Film
{
    public:
        // конструкторы
        Film();
        Film(const std::string &, const std::string &, const int, const int,
             const vec_str &);
 
        // set-методы
        void setName(const std::string &);
        void setGenre(const std::string &);
        void setMark(const int);
        void setYear(const int);
        void setCharacters(const vec_str &);
 
        // get-методы
        std::string getName() const;
        std::string getGenre() const;
        int getMark() const;
        int getYear() const;
        const vec_str& getCharacters() const;
 
        void print() const; // вывод информации на экран в удобном формате
 
    private:
        std::string name_;   // название
        std::string genre_;  // жанр
        int mark_;           // оценка
        int year_;           // год выпуска
        vec_str characters_; // основные герои
};
 
std::ostream & operator<< (std::ostream &, const Film &);
std::istream & operator>> (std::istream &, Film &);
 
#endif
Film.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
118
119
120
121
122
123
124
#include <string>
#include <iostream>
#include "Film.h"
 
using namespace std;
 
Film::Film() : name_(), genre_(), mark_(), year_(), characters_()
{}
 
Film::Film(const string& name, const string& genre, const int mark,
    const int year, const vec_str& characters) : name_(name),
    genre_(genre), mark_(mark), year_(year), characters_(characters)
{}
 
void Film::setName(const string& name)
{
    name_ = name;
}
 
void Film::setGenre(const string& genre)
{
    genre_ = genre;
}
 
void Film::setMark(const int mark)
{
    mark_ = mark;
}
 
void Film::setYear(const int year)
{
    year_ = year;
}
 
void Film::setCharacters(const vec_str& characters)
{
    characters_ = characters;
}
 
string Film::getName() const
{
    return name_;
}
 
string Film::getGenre() const
{
    return genre_;
}
 
int Film::getMark() const
{
    return mark_;
}
 
int Film::getYear() const
{
    return year_;
}
 
const vec_str& Film::getCharacters() const
{
    return characters_;
}
 
void Film::print() const
{
    cout << "Название фильма:  "   << name_
         << "\nЖанр:             " << genre_
         << "\nОценка:           ";
    for (int i=0; i < mark_; i++)
        cout << '*';
    cout << " (" << mark_ << ")"
         << "\nГод выпуска:      " << year_
         << "\nВ главных ролях:  ";
    for (vec_str_cit cit = characters_.begin(); cit != characters_.end(); ++cit)
    {
        cout << *cit;
        if (cit + 1 != characters_.end())
            cout << ',';
        cout << ' ';
    }
    cout << endl << endl;
}
 
// перегружаем оператор вывода, функция принимает в качестве параметров ссылку
// на ostream и константную ссылку на объект класса Film
ostream & operator<< (ostream& out, const Film& f)
{
    out << f.getName() << '\n'
        << f.getGenre() << '\n'
        << f.getMark() << '\n'
        << f.getYear() << '\n';
    for (vec_str_cit cit = f.getCharacters().begin();
         cit != f.getCharacters().end(); ++cit)
        out << *cit << '\n';
    out << '\n';
    return out; // возвращаем сформированный поток
}
 
// перегружаем оператор ввода, функция принимает в качестве параметров ссылку
// на istream и ссылку на объект класса Film
istream & operator>> (istream& ist, Film& f)
{
    // временные переменные
    string name, genre, tmp;
    int mark, year;
    vec_str characters;
    // считываем в них
    getline(ist, name);
    getline(ist, genre);
    ist >> mark >> year;
    ist.ignore(); // пропускаем символ '\n' оставшийся в потоке
    // пока считали строку и она не пустая
    while(getline(ist, tmp) && !tmp.empty())
        characters.push_back(tmp); // добавляем в список героев
 
    // устанавливаем свойства
    f.setName(name);
    f.setGenre(genre);
    f.setMark(mark);
    f.setYear(year);
    f.setCharacters(characters);
    return ist; // возвращаем поток
}
Anti55
-67 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 56
13.06.2013, 21:54  [ТС]     ООП пример #10
#include "Film.h" разве такой бывает?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
13.06.2013, 22:00     ООП пример #11
Anti55, у меня бывает. Кавычки как бы намекают на пользовательский заголовочный файл. Более того, я его даже выложил сюда
Цитата Сообщение от MrGluck Посмотреть сообщение
Film.h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 22:51     ООП пример
Еще ссылки по теме:

C++ Р. Лафоре "ООП в C++". Не компилируется пример с консольной графикой
Не компилируется пример пример! C++
ООП пример как сделать конструктор копирования на С++ C++

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

Или воспользуйтесь поиском по форуму:
kolobych
7 / 7 / 0
Регистрация: 07.05.2013
Сообщений: 17
13.06.2013, 22:51     ООП пример #12
Цитата Сообщение от Anti55 Посмотреть сообщение
#include "Film.h" разве такой бывает?
Вам надо учить еще очень много прежде чем приступать к ООП.
Вы с какой целью сюда написали задачку? Вам надо зачет сдать или научиться?
Если учиться, то вам надо вернуться назад, подучить немного С++ на процедурах и только потом ООП.
Yandex
Объявления
13.06.2013, 22:51     ООП пример
Ответ Создать тему
Опции темы

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