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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> написал задачу ооп, посмотрите код, скажите где ошибки и + 
V
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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