Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> написал задачу ооп, посмотрите код, скажите где ошибки и + 
V
    Опции темы
ferz721
Дата 11.11.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



thanks.
посмотрите код, скажите где ошибки и +

Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  dzCpp.7z 3,35 Kb
PM MAIL   Вверх
boostcoder
Дата 11.11.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(ferz721 @  11.11.2011,  10:12 Найти цитируемый пост)
и +

это что?
PM WWW   Вверх
bsa
Дата 11.11.2011, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(ferz721 @  11.11.2011,  11:12 Найти цитируемый пост)
посмотрите код
Раздражает необходимость качать и распаковывать файл.
посмотрел. дикое нарушение всех правил форматирования и оформления кода (один из вариантов тут). Дальше смотреть не стал.

PM   Вверх
newbee
Дата 11.11.2011, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(boostcoder @  11.11.2011,  11:13 Найти цитируемый пост)
это что? 
Плюсы наверное smile

ТС.
1. Форматирование кривое. То есть оно в разных местах разное.
2. gender = 1; Пол лучше зафиксировать константами.
3. STUDENT(STUDENT & s) и STUDENT(STUDENT * s) можно выразить один через другой.
4. STUDENT::getExam сделай массив из трех результатов экзаменов.
5. STUDENT::getDate сделай getAge, getBirthday и getReceipt. Первое лучше вычислять через второе, как текущее_время - сохраненное_время (в качестве текущего_вреемени можно использовать и любое другое, если хочется узнать возраст человека, скажем, три года назад)
6. Какой ООП ты просишь посмотреть, там в коде просто пара структур.


--------------------
You're face to face
With man who sold the world
PM   Вверх
bsa
Дата 11.11.2011, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(newbee @  11.11.2011,  11:25 Найти цитируемый пост)
2. gender = 1; Пол лучше зафиксировать константами.
Ты хотела сказать перечислением (enum)?
PM   Вверх
newbee
Дата 11.11.2011, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(bsa @  11.11.2011,  11:27 Найти цитируемый пост)
Ты хотела сказать перечислением (enum)? 
Есть множество способов введения констант. Пусть будет перечисление.


--------------------
You're face to face
With man who sold the world
PM   Вверх
bsa
Дата 11.11.2011, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(newbee @  11.11.2011,  12:14 Найти цитируемый пост)
Есть множество способов введения констант.

Есть множество. И в С разницы практически нет между #define и enum. А вот в С++ есть. А просто константа... Нужно сильно погеморроиться, чтобы не допустить присваивания левого значения...
PM   Вверх
ferz721
Дата 11.11.2011, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



Цитата

Раздражает необходимость качать и распаковывать файл.

сколько считаеться кода и файлов много при котором лучше архивировать?
Цитата

Цитата

это что? 

плюсы наверное

да, похоже их нет.
PM MAIL   Вверх
bsa
Дата 11.11.2011, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(ferz721 @  11.11.2011,  13:01 Найти цитируемый пост)
сколько считаеться кода и файлов много при котором лучше архивировать?

нисколько. данное действие крайне не рекомендуется. Во-первых, потому что люди не любят грузить всякую гадость. Во-вторых, просто лень. В-третьих, может не быть архиватора (ладно бы зип использовал). В-третьих, просто неудобно. Как ты можешь заметить, скачало только 4 участника форума. А если бы ты выложил текст просто так, то было бы на порядок больше просмотров.
Поэтому, выкладываешь только те файлы, которых хочешь чтобы раскритиковали/похвалили. Более того, в большинстве случаев совсем не обязательно выкладывать полностью, достаточно лишь часть.
Я сильно сомневаюсь, что народ срочно побежит твой код компилировать...
Выкладывать архив следует тогда, когда тебя об этом попросят другие участники.
PM   Вверх
borisbn
Дата 11.11.2011, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(bsa @  11.11.2011,  10:20 Найти цитируемый пост)
Раздражает необходимость качать и распаковывать файл.

Вот поэтому и не стал скачивать.
Можно было и в сообщение вставить и на LWS выложить...

ferz721, тебе bsa уже дважды сказал, что прикреплённый архив - не лучшее решение, а воз и ныне там...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
baldina
Дата 11.11.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



1. STUDENT(STUDENT * s) не нужен если есть STUDENT(STUDENT & s)
2. STUDENT(const STUDENT & s)
3. STUDENT(const STUDENT & s) не нужен, т.к. тривиален. компилятор сам его сделает
4. функции, определенные в классе не нужно объявлять inline, они такие по умолчанию
5. функции, не модифицирующие объект, должны быть объявлены с модификатором const
Код

string getName() const {return name;}

6. тривиальный (пустой) деструктор не нужен, компилятор сгенерирует его сам
7. signed int short это масло масляное. просто short
8. инициализация в конструкторе делается до тела
Код

STUDENT(string s, short g, long p, short ag, long b, unsigned long r) 
 : name(s), gender(g), phone(p), age(ag), birthday (b), receipt (r), exam1(0), exam2(0), exam3(0)
{}


приведя класс в порядок мы получим весьма компактный код http://codepad.org/AHHyDYZ7
остальное в том же духе


Это сообщение отредактировал(а) baldina - 11.11.2011, 13:48
PM MAIL   Вверх
mes
Дата 11.11.2011, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(baldina @  11.11.2011,  12:45 Найти цитируемый пост)
остальное в том же духе

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



--------------------
PM MAIL WWW   Вверх
baldina
Дата 11.11.2011, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



т.е. от "задачи про ООП" ничего не останется?  smile

Добавлено через 1 минуту и 51 секунду
Цитата(mes @  11.11.2011,  17:14 Найти цитируемый пост)
экзамены не должны жить внутри студента.. 

полагаю, если отсутствие нескольких "полезных" конструкторов студент обоснует, это ему будет только в +

Добавлено через 5 минут и 15 секунд
мне кстати известен случай, когда студент подобным заниматься не стал, минималистский интерфейс объяснил, а на резонный вопрос преподавателя, что же материально и весомое останется для подтверждения знаний языка, студент на коленке набросал иерархию графических полиморфных объектов, попутно пояснив почему квадрат это не прямоугольник. препод был в отпаде.
PM MAIL   Вверх
mes
Дата 11.11.2011, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(baldina @  11.11.2011,  16:18 Найти цитируемый пост)
т.е. от "задачи про ООП" ничего не останется?  

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



--------------------
PM MAIL WWW   Вверх
baldina
Дата 11.11.2011, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(mes @  11.11.2011,  17:26 Найти цитируемый пост)
 ООП "разделяй и властвуй", а не "нагромаждай и мучайся"

красиво. запомню. smile
PM MAIL   Вверх
ferz721
Дата 11.11.2011, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



Цитата(borisbn @ 11.11.2011,  12:55)


Цитата

ferz721, тебе bsa уже дважды сказал, что прикреплённый архив - не лучшее решение, а воз и ныне там...

Код

#include <iostream>
#include "studentF/student.h"
using namespace std;
int main()
{
groupST X;
cout << X.size;

    return 0;
}



Код

#ifndef STUDENT_H_
#define STUDENT_H_
#include <string>
using std::string;
class STUDENT
{
private:
    struct exam
    {
        unsigned int short exam1;
        unsigned int short exam2;
        unsigned int short exam3;
    };
    struct date
    {
        signed     int short age;
        signed     int long birthday;
        unsigned int long receipt;
    };
string name; signed int short gender; unsigned int long phone; exam ex; date dt;
public:
STUDENT()
{
 name = "smile student"; gender = 1; phone = 0;
 ex.exam1 = ex.exam2 = ex.exam3 = 0;
 dt.age = dt.birthday = dt.receipt = 0;
}
STUDENT(string s, signed int short g, unsigned int long p, signed     int short ag, signed     int long b, unsigned int long r)
{
    name = s; gender = g; phone = p;
    ex.exam1 = ex.exam2 = ex.exam3 = 0;
    dt.age = ag; dt.birthday = b; dt.receipt = r;
}
STUDENT(STUDENT & s)
{
    this->name = s.name; this->gender = s.gender; this->phone = s.phone;
    this->ex.exam1 = s.ex.exam1; this->ex.exam2 = s.ex.exam2; this->ex.exam3 = s.ex.exam3;
    this->dt.age = s.dt.age; this->dt.birthday = s.dt.birthday; this->dt.receipt = s.dt.receipt;
}
STUDENT(STUDENT * s)
{
    this->name = s->name; this->gender = s->gender; this->phone = s->phone;
    this->ex.exam1 = s->ex.exam1; this->ex.exam2 = s->ex.exam2; this->ex.exam3 = s->ex.exam3;
    this->dt.age = s->dt.age; this->dt.birthday = s->dt.birthday; this->dt.receipt = s->dt.receipt;
}
inline string getName(){return name;}
inline signed int short getGender() {return gender;}
inline unsigned int long getPhone(){return phone;}
unsigned int short getExam (int i);
signed     int long getDate (int i);
~STUDENT() {}
};

unsigned int short STUDENT::getExam (int i)
 {
     if(i == 1)
     return ex.exam1;
     if(i == 2)
     return ex.exam2;
     if(i == 3)
     return ex.exam3;
 return -1;
 }
signed     int long STUDENT::getDate (int i)
{
     if(i == 1)
     return dt.age;
     if(i == 2)
     return dt.birthday;
     if(i == 3)
     return dt.receipt;
return -1;
}


class groupST
{
private:
public:
    int size;
    STUDENT * st;
public:
groupST(){}
groupST(int i){st = new STUDENT [i]; size = i;}
void addStudent(STUDENT *);
};
void groupST::addStudent(STUDENT * S)
{
    STUDENT * stCopy = new STUDENT [size += 1]; int i = 0;
    for(;i<size-1;i++)    {stCopy[i] = st[i]; }   i++; stCopy[i] = S;
}

#endif


Добавлено через 9 минут и 45 секунд
Цитата(baldina @ 11.11.2011,  13:45)
8. инициализация в конструкторе делается до тела
Код

STUDENT(string s, short g, long p, short ag, long b, unsigned long r) 
 : name(s), gender(g), phone(p), age(ag), birthday (b), receipt (r), exam1(0), exam2(0), exam3(0)
{}


в книгах читал, что так стоит инициализировать в случае испльзования констант или при наследовании. почему так?
PM MAIL   Вверх
bsa
Дата 11.11.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(ferz721 @  11.11.2011,  19:41 Найти цитируемый пост)
в книгах читал, что так стоит инициализировать в случае испльзования констант или при наследовании. почему так? 

Во-первых, как иначе ты проинициализируешь константный атрибут класса? Рабочие варианты в студию (без грязных хаков, вроде const_cast и memcpy).
Во-вторых, иногда при наследовании ты должен как-то передать параметры в конструктор базового класса. Сможешь предложить другие варианты?
В-третьих, такой метод инициализации в принципе предпочтителен, так как у компилятора появляется больше возможностей для оптимизации.
В-четвертых, ты вообще не читал про оформление кода? Ты нас (да и себя в первую очередь) не уважаешь? Зачем выкладываешь заведомо трудно читаемый код? Тебе же самому его сложно понимать. Помни, что код ты пишешь 1 раз, а читаешь на несколько порядков больше.
PM   Вверх
borisbn
Дата 12.11.2011, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(bsa @  11.11.2011,  20:16 Найти цитируемый пост)
Зачем выкладываешь заведомо трудно читаемый код?

отличный код, вообще-то
Цитата(ferz721 @  11.11.2011,  18:41 Найти цитируемый пост)
for(;i<size-1;i++)    {stCopy[i] = st[i]; }   i++; stCopy[i] = S;

http://l-userpic.livejournal.com/102603775/5658153
если что smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Lols
Дата 12.11.2011, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 21.10.2011

Репутация: нет
Всего: нет



Оу... Распаковываю, смотрю, выпадаю в осадок, думаю, удаляю. Айм сорри :(
PM MAIL   Вверх
ferz721
Дата 12.11.2011, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



Цитата

В-четвертых, ты вообще не читал про оформление кода? 

тут я прочитал и теперь буду применять.
Цитата

Ты нас (да и себя в первую очередь) не уважаешь? 
 я пишу сюда, значит считаю что здесь умные люди.
например я встречал людей которые знают меньше чем я и работают програмистами.
Цитата

Зачем выкладываешь заведомо трудно читаемый код? Тебе же самому его сложно понимать. Помни, что код ты пишешь 1 раз, а читаешь на несколько порядков больше.

у меня экран маленький поэтому мне так удабней, выкладывать буду согласно статье.
PM MAIL   Вверх
borisbn
Дата 12.11.2011, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



О! Наконец-то адекватный новичок попался - на критику не в бутылку лезет, а нормально воспринимает. Такому у помочь хочется  smile 
1. Раз уж решил использовать STL, то переделай groupST, чтобы он хранил вектор. Как-то так
Код

#include <vector>
class groupST
{
public:
    groupST(){}
    groupST(int i) : students( i ) { }
    void addStudent( const STUDENT & );
    int size() {
        return students.size();
    }

private:
    std::vector< STUDENT > students;

};

void groupST::addStudent( const STUDENT & s )
{
    students.push_back( s );
}

хотя... без дополнительного функционала это - ненужная надстройка над vector< STUDENT >

2. "Экзамен" не должен быть частью "студента". Максимум - студент может иметь список указателей на экзамены. (О.. уже говорили... Ну, ничего, повторение, как известно...)
3. Если с тем, что birthday и receipt у студента не меняется - я соглашусь, то age не меняется только у студентов, у которых gender == woman smile В общем необходимо дописать ф-цию вычисляющую и возвращающую age
4. Ну и, ессно, всё, что сказал baldina

Это сообщение отредактировал(а) borisbn - 12.11.2011, 09:11


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ferz721
Дата 12.11.2011, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.1.2011

Репутация: нет
Всего: нет



borisbn ok
PM MAIL   Вверх
borisbn
Дата 12.11.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(ferz721 @  12.11.2011,  08:41 Найти цитируемый пост)
у меня экран маленький поэтому мне так удабней,

программа должна читаться в одном направлении, а именно - сверху вниз. бегать глазами сначала слева-направо, а затем сверху-вниз - оч. неудобно

Это сообщение отредактировал(а) borisbn - 12.11.2011, 12:46


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 12.11.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(ferz721 @  12.11.2011,  09:41 Найти цитируемый пост)
у меня экран маленький поэтому мне так удабней, выкладывать буду согласно статье. 

Если он у тебя широкоэкранный (только это объяснение я могу придумать), то вариантов несколько:
1. купить второй монитор и поставить над первым. Через два часа дырки между ними замечать не будешь.
2. сменить среду разработки на ту, которая сохраняет максимум вертикального пространства.
3. если монитор позволяет, то повернуть его на 90 градусов.
4. писать короткие функции, чтобы влезали на экран (это в принципе вообще хорошо)
5. пересилить себя и смириться...

Правила оформления кода придуманы не просто так. Есть даже языки, которые на неправильно оформленный код ругаются. В первую очередь это необходимо для того, чтобы одного взгляда на код было достаточно, чтобы определить его структуру. Где какие смысловые блоки, что в цикле, что в условии... Благодаря ему легко находятся (точнее, не допускаются) ошибки не включения операций в цикл/условие:
Код
for(int i = 0; i < 10; ++i) printf("%i", i); printf("\n");

Да и потом, как заметил borisbn, код лучше читается сверху вниз.
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1145 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.