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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование 
:(
    Опции темы
Doublefaced
Дата 3.4.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дали на дом задачку и как-то застрял.. до этого с наследованием не работал вообще(


есть родительский класс Fraction (2 поля) он работает с дробями у него есть класс-наследник Compound (наследует поля + еще одно новое..этот класс добавляет целую часть к дроби.. т.е. делает её смешенной)

поле а - числитель
поле b - знаменатель
поле c - целая часть

метод призван сократить неправильную дробь и увеличить целую часть

Код

Compound Compound::In (Fraction x)
{
    Compound f;
    while (f.a>f.b)
    {
        f.c=f.c+1;
        f.a=f.a-f.b;
    }
    
    return f;
}



Преподаватель дал заглушку "Compound Compound::In (Fraction x)"
вопрос: 
1) если мы передаем "Fraction x" - с двумя полями, то потом при работе третье поле само создается?
2) почему при вызове (значения передаются, просто вырезал кусок)

Код

Compound l;    
    l.In ();


возникает ошибка "error C2660: 'In' : function does not take 0 parameters"? метод же применяется к объекту.. к чему передавать параметры?


Догадываюсь, что ошибка глупая, но прошу разморочить меня...

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


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


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

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



Цитата(Doublefaced @  3.4.2009,  16:23 Найти цитируемый пост)
метод же применяется к объекту.. к чему передавать параметры?

Цитата(Doublefaced @  3.4.2009,  16:23 Найти цитируемый пост)
Compound Compound::In (Fraction x)

метод объявлен, как принимающей параметр типа Fraction, значит придется передавать )

Добавлено через 1 минуту и 13 секунд
Цитата(Doublefaced @  3.4.2009,  16:23 Найти цитируемый пост)
Compound Compound::In (Fraction x)
{
    Compound f;
    while (f.a>f.b)
    {
        f.c=f.c+1;
        f.a=f.a-f.b;
    }


а где в коде используется аргумент x ?!

Добавлено через 3 минуты и 52 секунды
Цитата(Doublefaced @  3.4.2009,  16:23 Найти цитируемый пост)
вопрос: 
1) если мы передаем "Fraction x" - с двумя полями, то потом при работе третье поле само создается?

абсолютно не понял вопросa.
у кого должно создаться третье поле ? 



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


Новичок



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

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



Код

 Compound Compound::In (Fraction x)
{
    Compound f;
    while (a>b)
    {
        f.c=f.c+1;
        f.a=a-b;
        f.b=b;
    }
    
    return f;
}


из простой дроби делает смешенную..
поправил...

как теперь применить метод класса Compound к аргументам класса Fraction?


"абсолютно не понял вопросa.
у кого должно создаться третье поле ? " - спс.. не у кого) я проспал(
PM MAIL   Вверх
mes
Дата 3.4.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Doublefaced @  3.4.2009,  16:44 Найти цитируемый пост)
поправил...

Цитата(mes @  3.4.2009,  16:29 Найти цитируемый пост)
а где в коде используется аргумент x ?!


Код

Compound Compound::In (Fraction x)
{
    а = x.a;
    b = x.a;
    c = 0;

    while (a>b)
    {
        ++c;
        a-=b;      
    }
//  цикл while можно заменить на for
//   for (; a>b;  ++c, a-=b);      

    return *this;
}





Это сообщение отредактировал(а) mes - 3.4.2009, 18:03


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


Новичок



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

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



Цитата(mes @ 3.4.2009,  18:01)
Цитата(Doublefaced @  3.4.2009,  16:44 Найти цитируемый пост)
поправил...

Цитата(mes @  3.4.2009,  16:29 Найти цитируемый пост)
а где в коде используется аргумент x ?!


Код

Compound Compound::In (Fraction x)
{
    а = x.a;
    b = x.a;
    c = 0;

    while (a>b)
    {
        ++c;
        a-=b;      
    }
//  цикл while можно заменить на for
//   for (; a>b;  ++c, a-=b);      

    return *this;
}


с моим кодом метод можно будет применять к аргументам класса Fraction? как это будет выглядеть?

просто с Вашим вариантом он отказывается сотрудничать...

Это сообщение отредактировал(а) Doublefaced - 3.4.2009, 18:30
PM MAIL   Вверх
mes
Дата 3.4.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Doublefaced @  3.4.2009,  17:20 Найти цитируемый пост)
с моим кодом метод можно будет применять к аргументам класса Fraction? как это будет выглядеть?
просто с Вашим вариантом он отказывается сотрудничать...

неудивительно, я ведь вам показал пример. В частности доступ к переменным класса Fraction приватный, и поэтому x.a надо заменить на вызов соответствующего Геттера.
Я не телепат и не вижу описаний Ваших классов, чтоб подсказать какой. smile


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


Новичок



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

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



Код

class Fraction
{
protected:
    int a, b;


ну и далее методы...

и  

Код

class Compound:public Fraction
{
protected:
    int c;
    Fraction f; 


Так достаточно информации, чтобы подсказать?
PM MAIL   Вверх
mes
Дата 3.4.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Doublefaced @  3.4.2009,  17:49 Найти цитируемый пост)

Так достаточно информации, чтобы подсказать? 

во первых переменные лучше (хотя и не обязательно) объявлять в private секции
нопока не разберетесь оставьте   их в protected .

во вторых :
Цитата(Doublefaced @  3.4.2009,  17:49 Найти цитируемый пост)
class Compound:public Fraction
{
protected:
    int c;
    Fraction f; 

Вы дважды включили объект типа Fraction в объект типа Compound: 
1. наследованием
2. включением (эту строчку следует убрать)

В третьих исходя из вышеприведенного кода непонятно, что Вы имели ввиду, когда говорили:
Цитата(Doublefaced @  3.4.2009,  17:20 Найти цитируемый пост)
просто с Вашим вариантом он отказывается сотрудничать...




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


Новичок



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

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



"во первых переменные лучше (хотя и не обязательно) объявлять в private секции
нопока не разберетесь оставьте   их в protected ."  - хоть и новенький, но поспорю)

поля приват при любом наследовании не видит наследник..
паблик не нужно.. так что ршил протектед сделать.. так они будут "приватными" для наследника...

суждения верны?


"Вы дважды включили объект типа Fraction в объект типа Compound: 
1. наследованием
2. включением (эту строчку следует убрать)"
не очень понял.. вроде оба раза необходимы...

"В третьих исходя из вышеприведенного кода непонятно, что Вы имели ввиду, когда говорили..." - он не работает так..
просто... мой код верен.. я понимаю, что о не оптимален.. но как-то чисто для восприятия.. не хотел бы его менять.. когда свое, пусть и чуть-чуть корявое.. оно легче воспринимаеься smile
PM MAIL   Вверх
mes
Дата 3.4.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Doublefaced @  3.4.2009,  18:22 Найти цитируемый пост)
просто... мой код верен.. 

ну тогда я умываю руки smile


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


Новичок



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

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



я говорил только о цикле while smile
я про это а вот про наследование и передачу параметров я не спорю...
while вроде корректно написан...

с остальным плохо...

не цепляйтесь плз к словам(

PM MAIL   Вверх
mes
Дата 3.4.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Doublefaced @  3.4.2009,  18:30 Найти цитируемый пост)
не цепляйтесь плз к словам(

ну так выражайтесь ясней.

Цитата(Doublefaced @  3.4.2009,  18:30 Найти цитируемый пост)
while вроде корректно написан...

в вашем коде в цикле while используется временный объект , который уничтожается по окончанию функции и результ всех проведенных операций теряется бесследно - не думаю что это правильно ;)

Цитата(Doublefaced @  3.4.2009,  18:22 Найти цитируемый пост)
хоть и новенький, но поспорю)
поля приват

а я не буду спорить ) это к теме не относится и было предложено лишь для улучшения, как и цикл for

Цитата(Doublefaced @  3.4.2009,  18:22 Найти цитируемый пост)
вроде оба раза необходимы...

зачем ?
Код

class Compound:public Fraction
{
..
    int c;
}; 
 Теперь объект класса Compound обладает тремя полями, два унаследованы от Fraction и одно "добавленное".





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


Новичок



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

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



там же

return f;

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

Добавлено через 4 минуты и 55 секунд
ой ёёё)

я прозрел))))

спс за терпение.. сейчас переделаю)
PM MAIL   Вверх
mes
Дата 3.4.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Doublefaced @  3.4.2009,  18:55 Найти цитируемый пост)

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

можем, но в объекте эта информация то не остается .. Зачем тогда поля, если Вы собрались возвращать информацию через ретурн ? smile


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


Новичок



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

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



можем, но в объекте эта информация то не остается .. Зачем тогда поля, если Вы собрались возвращать информацию через ретурн ? 

спс с этим разобрался..

а еще..
можете подсказать алгоритм...сократить дробь... типа  2/4, чтобы дешево было.. относительно писанины?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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