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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с классами и преобразованием 
:(
    Опции темы
profispb
Дата 6.2.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Задача:
Описать два класса
1. Класс BIN число в 2с/с тип char*
2. Класс DEC число в 10 с/с тип int
Определить их взаимное преобразование и продемонстрировать в ф-цию main().
Работа с конструктором.

У нас препод плохо объясняет ООП. С классами совсем плохо дело, точнее с их взаимным преобразованием.
Помогите завтра сдавать!!!
Заранее благодарен.
--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
Mayk
Дата 6.2.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Собственно преобразованием занимаются
Bin::operator Dec() const (Bin --> Dec),
Dec::operator Bin() const (Dec --> Bin)

Для простоты значения в классах нельзя изменять.
Для простоты отрицательные значения не обрабатываются.

Код

#include <string>
#include <cassert>
#include <iostream>

using namespace std;
class Bin;
class Dec;

class Bin
{
    const char* m_bin;
    Bin& operator = (const Bin& rhs);
    
    public:
    Bin(const char* str){
        m_bin = str;
    }

    const char* stringValue() const {
        return m_bin;
    }

    operator Dec() const;

    unsigned uintValue() const{
        return strtoul(m_bin,0,2);
    }

};

class Dec
{
    const int m_value;
    Dec& operator = (const Dec& rhs);

    public:
    Dec(int value) : m_value(value){}

    operator Bin() const ;


    unsigned uintValue() const 
    {
        return static_cast<unsigned>(m_value);
    }

    int intValue() const{
        return m_value;
    }

};


Bin::operator Dec() const
{
    return Dec(uintValue());
}

Dec::operator Bin() const
{
    string str="";
    unsigned u = uintValue();

    while ( u ){
        str = "01"[(u%2) == 1] + str;
        u /= 2;
    }
    return Bin(str.c_str());
}

void functionRequireBinary(const Bin&)
{
    cout << "functionRequireBinary called with Bin argument" << endl;
}


void functionRequireDecimal(const Dec&)
{
    cout << "functionRequireDecimal called with Dec argument" << endl;
}


int main()
{
    Bin bin11("1011");
    Dec dec11(11);


    assert( bin11.uintValue() == 11 );
    assert( dec11.uintValue() == 11 );

    cout << "bin11=" << bin11.stringValue() << endl ;
    cout << "dec11=" << dec11.intValue() << endl ;

    //bin->dec
    Dec dec11_2(bin11);
    assert(dec11_2.uintValue() == 11);
    cout << "dec11_2=" << dec11_2.intValue() << endl ;

    //dec->bin
    Bin bin11_2(dec11);
    assert(bin11_2.uintValue() == 11);
    cout << "bin11_2=" << bin11_2.stringValue() << endl ;

    functionRequireDecimal(bin11); //bin->dec
    functionRequireDecimal(dec11);
    
    functionRequireBinary(bin11);
    functionRequireBinary(dec11);    //dec->bin
    
}


что-то около того


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
profispb
Дата 6.2.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Mayk Не работает код типа нет файла заголовочного cassert.h
--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
Mayk
Дата 6.2.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



гыы. это что за компилятор такой?
можеть заменить на <assert.h>
или вместо ассертов cout'ы делать.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
profispb
Дата 6.2.2006, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо! Сам разобрался написал, заново прогу понял в чем были у меня ошибки, почитал книжку.
А твой код всейравно работает криво, естественно с ошибками.
--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
profispb
Дата 14.2.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Кстати вот код программы:

Код

#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>

class Dec;    
class Bin    
{   public:
       char* m_bin;
         Bin(char* str="1011")
           {m_bin = str;}
         Bin(Dec h);
         void Print(void)
           {cout<<"Bin=> "<<m_bin<<endl;}
};

class Dec
{   public:
       int m_value;
         Dec(int value=0)
            {m_value=value;}
         Dec(Bin n);
         void Print(void)
            {cout<<"Dec=> "<<m_value<<endl;}
};

Dec::Dec(Bin n)
{
 int s, t;
 m_value=0;
 s=atoi(n.m_bin);
 unsigned int i=0;
  while(i<=strlen(n.m_bin))
    {t=s%10; s/=10;
      m_value+=t*pow(2,i);
       i++; }
};

Bin::Bin(Dec h)
{
  int x;
  x=h.m_value;
   while(x>0)
    {if(x%2==0){strcat(m_bin,"0");}
      else {strcat(m_bin,"1");}            
       x/=2;}
};

void main()
{
    Bin b;
    Dec d;
      d=b;
        d.Print();
          b=d;
            b.Print();
    getch();
}

--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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