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

Переопределение оператора== - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм программы http://www.cyberforum.ru/cpp-beginners/thread45600.html
Доброго времени суток. Есть программа, она выводит время до определенной даты #include <time.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #ifdef WIN32 # define SLEEP(x)...
C++ функция strcpy и strcat Добрый день!У меня такая проблема...Есть массив строк, где хранятся имена и при выводе имени на экран,если оно длиннее определенного,то я его обрезаю,а в конец добавляю три точки...Но почему-то оно... http://www.cyberforum.ru/cpp-beginners/thread45574.html
C++ Конструктор
Конструктор сбрасывающий экземпляр класса. Что он из себя представляет? Приведите примеры.
Exe файл на другом компе C++
написал прогу на С++ по VS08, exe файл по флешке передал другу, говорит не открывает, в чем проблема?
C++ Статическое поле http://www.cyberforum.ru/cpp-beginners/thread45516.html
Помогите с такой проблемой. Программа нормально компилится, но возвращается, вот такая ошибка при объявлении статического поля, являющегося указателем на массив значений строк символов(char*) типа...
C++ Представление целых чисел массивом байтов у меня вот такая задачка:Написать процедуры сложения и вычитания двух целых чисел, каждое из которых представлено массивом байтов. Первый байт массива содержит код знака числа: 0 - ‘+’, 225 - ‘-‘, а... подробнее

Показать сообщение отдельно
Skirmisher
44 / 44 / 0
Регистрация: 23.05.2009
Сообщений: 92

Переопределение оператора== - C++

31.07.2009, 08:01. Просмотров 2044. Ответов 23
Метки (Все метки)

Создал функцию-операцию == для экземпляров класса, однако при выполнении
данного кода
Trigger.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include "combinate.h"
 
class Trigger : public  Combinate
{
    static int *intValues;
public:
    int stateOutF;   //trigger forward
    int stateOutInv; //trigger invert
public:
    Trigger(void);
    Trigger(const Trigger &trig);
    bool SetValue(int number, int value);
    int GetState(size_t number);
    int GetState(size_t variant, size_t value);
    bool operator ==(const Trigger &trig);
    ~Trigger(void);
};
Trigger.cpp
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
...
int* Trigger::intValues=0;
 
Trigger::Trigger(void)
{
    stateOutF=1;
    stateOutInv=1;
    intValues=new int[input];
}
bool Trigger::SetValue(int number, int value)
{
    bool tr;
    if(number<=input && number>0)
    {
    intValues[number-1]=value;
    tr=true;
    }
    else
        tr=false;
    return tr;
}
bool Trigger::operator ==(const Trigger &trig)
{
    for(int i=0; i<input;)
    {
       if(intValues[i]==trig.intValues[i])
       {
           i++;
       }
       else 
       {
           return false;
       }
    }//for(int i=0; i<input; i++)
    return true;
 
}
Main.cpp
C++
1
2
3
4
Trigger trig;
Trigger trigd;
trig.SetValue(1, 45678);
bool dtr=(trig==trigd); //по идее не равны, однако выдает true
Функции-оператору ==почему-то в качестве параметра передается
объект с параметрами по умолчанию, хотя уже значение trig.intValues
уже изменилось
C++
1
trig.SetValue(1, 45678);
и объекты не могут быть равны, так как функция-операция
проверяет на равенство это поле.

Добавлено через 59 минут 24 секунды

Я понял в чем проблема оба объекта используют указатель на статическую переменную
intValues, расположенную в одной области памяти(, следовательно изменение значение
этого статического поля приводит к аналогичным изменениям у другого объекта и выходит, что оба объекта из-за моей функции-оператор== всегда равны(.
Можно ли как-нибудь обойти это ограничение, связанное со статическим полем?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru