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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HIMen
4136 / 1385 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
#1

Функция с оператором - C++

10.06.2009, 18:06. Просмотров 590. Ответов 3
Метки нет (Все метки)

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
#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std;
class BitString
{
public: 
    BitString(int s)
    {       
        size=s; 
        if(size<0)
        {
            cout << "[X] Недопустимая инициализация: ошибка аргумента\n";
            exit(1);
        }
        set=new(nothrow) char[size];
        if(!set)
        {
            cout << "[X] Произошла ошибка при запросе на выделение памяти...\n";
            exit(1);
        }
        for(int i=0; i<size; ++i)
        {
            set[i]=char(rand()%2+48);
        }
    }
    BitString(BitString & obj)
    {       
        size=obj.size;
        set=new(nothrow) char[size];
        if(!set)
        {
            cout << "[Х] Произошла ошибка при запросе на выделение памяти...\n";
            exit(1);
        }
        for(int i=0; i<size; ++i)
        set[i]=obj.set[i];
    }
    void print()
    {
        for(int i=0; i<size; i++)
        {
            cout << set[i] << " ";
        }
        cout << endl;
    }
    BitString operator & (BitString &obj2)
    {
        BitString c(35);        
        for(int i=0; i<size; i++)
        {
            if(set[i]=='1' && obj2.set[i]=='1') c.set[i]='1';
            else c.set[i]='0';
        }       
        return c;       
    }
    ~BitString()
    {
        delete [] set;
    }
private:
    char *set;
    int size;
};
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251); 
    srand(unsigned(time(0)));
 
    BitString a(35), b(35), c(35);
    c= a & b;
    c.print();
    system("pause");
    return 0;
}
Рандомно заполняем 2 битовые строки, выполняем операцию умножения (and)
и присваиваем результат 3-ей строке.
Не знаю как правильно использовать operator, помогите, вместо 0 или 1 выводит Э
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2009, 18:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция с оператором (C++):

Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? - C++
В заголовочном файле &quot;klass.h&quot; есть класс: class klass { int x; public: klass(); ~klass(); void show(); friend void...

Работа с оператором for - C++
Использовать оператора цикла с параметром (for) Найти сумму положительных компонент вектора . Элементы вектора определяются по формуле:...

переменные с оператором If - C++
Даны две переменные целого типа:А и В. Если их значение не равны, то присвоить каждой переменной сумму этих значений, а если равны, то...

Решить с оператором while - C++
помогите пожалуйста решить прогу, используя в прогрумме оператор while. Условие:Пасажирский самолет может поднять груз общим весом...

Ошибка с оператором - C++
Ребят помогите не могу вдуплить только начал изучать С++ и при написании программы посчета слов в файле выдает ошибку (недопустимый else...

Задача с оператором if - C++
Определить, могут ли три точки с координатами (x1, y1), (x2, y2), (x3, y3) являться вершинами треугольника. использовать условный оператор...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Deiron
26 / 26 / 1
Регистрация: 25.05.2009
Сообщений: 98
10.06.2009, 19:57 #2
Здесь очевиднейшая ошибка. По завершению метода operator & уничтожается локальная переменная c. То есть для c вызывается деструктор. А значит, то что было в c легко может потеряться.
И еще: у вас не определен оператор присваивания. Это не есть хорошо. В данном случае оператор присваивания, который дается по умолчанию, может сработать не верно.
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
11.06.2009, 00:49 #3
Это не компилится
main.cpp In function `int main()':
72 main.cpp no matching function for call to `BitString::BitString(BitString)'
main.cpp:28 candidates are: BitString::BitString(BitString&)
main.cpp:28 BitString::BitString(int)
Исправил заголовок на BitString(const BitString & obj), всё нормально, нули и единицы.
Насчёт c - где она в памяти будет, не знаю, но возвращать её таким образом вроде нормально.
0
HIMen
4136 / 1385 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
11.06.2009, 01:29  [ТС] #4
Я уже разобрался, оператор присваивания тоже надо перегрузить
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2009, 01:29
Привет! Вот еще темы с ответами:

Ошибка с оператором switch - C++
Добрый день! Я писала программу в VS2010, но потом появилась необходимость запустить программу в 2008. После запуска, она ругается на этот...

Загвоздка с оператором switch - C++
Стоит MVS08, при вводе 5 сразу выходит из программы, а когда ошибочно, т.е. ввожу 8, он мне Error! Again the input..., ввожу 5, после...

Класс с переопределенным оператором [] - C++
Добрый вечер, леди и джентльмены! У меня к вам созрел вопрос, который самому мне решить оказалось не по силам. Я хочу создать класс,...

Проблемма с логическим оператором if - C++
Всем привет. Мне надо было написать такую програмку: если пользователь вводит символ 'y' (yes), то он задаёт данные в структуру, которые в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.06.2009, 01:29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru