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

Не работают перегруженные операторы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверьте, не является ли слово "кас" корнем слова без приставки http://www.cyberforum.ru/cpp-beginners/thread393223.html
3 задачи - проверьте, не является ли слово "кас" корнем слова без приставки. - Отделите в слове повторяющиеся более двух раз буквы запятыми. - Вычеркните из слова букву, предшествующую сочетанию "ча"
C++ Закрепление отметки в checkedListBox. Доброго здоровьица! Хочу узнать, как можно сделать так, чтобы после выделения какого-либо пункта в checkedListBox нельзя было бы снять выделение. Заранее спасибо :) http://www.cyberforum.ru/cpp-beginners/thread393222.html
getline() в чем дело C++
Нужно заполнять данный массив, если использовать просто "cin<<" то пробелы нельзя делать при вводе. Поэтому хочу использовать getline(), вроде все правильно, но почему то работает не корректно. #include <iostream> #include <string.h> using namespace std; struct WORKER { char fio; char post; short year;
Удаление отрицательных элементов в массиве C++
Помогите с программой на С++ пожалуйста=) Я сделала наброски,но по-моему не совсем правильно,и как удалить все подряд отрицательные элементы я не знаю:cry:.Выручайте,ребят)) "В массиве A=(a1, а2, ..., аn)удалить все подряд отрицательные элементы, идущие вслед за минимальным элементом массива." #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std;
C++ дать задачу http://www.cyberforum.ru/cpp-beginners/thread393186.html
Ребят всем привет.Вы могли бы дать какуюнибудь комплексную задачку по темам:перегрузка конструкторов,присваивание объктов,передача объектов функциям,возврат объектов
C++ Помогите написать программу в С++ (если можно с объяснением) Последовательность x1, x2, … образована по закону (закон - это уравнение на картинке прикрепленное к заданию) . Записать в файл первые 10 членов последовательности. подробнее

Показать сообщение отдельно
maxis1523
1 / 1 / 0
Регистрация: 28.10.2009
Сообщений: 20

Не работают перегруженные операторы - C++

27.11.2011, 19:34. Просмотров 397. Ответов 5
Метки (Все метки)

проблема такова:
есть перегруженный оператор "=", при вызове которого выполняется присвоение значений массива, однако же, результат почему-то обратно в main не возвращается.
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "stdafx.h"
#include "iostream"
#include "string"
#include "cstring"
 
using namespace std;
using namespace System;
 
enum sost{s0,s1,sX};    //перечисление - значение сигнала
 
struct signal   //структура сигнал
{
    sost s;     //состояние сигнала
    int d;      //длительность состояния
};
 
const int maxx=10;      
const int maxsost=1;    //максимальная длительность состояния сигнала
 
class diagram
{
    friend std::ostream& operator<<(std::ostream& os, diagram& dd);
    signal mas[maxx];
public:
    diagram()   //конструктор по умолчанию
    {
        for (int i=0;i<maxx;i++) 
        {           
            mas[i].d=0;
        };
    };
 
    diagram(sost ss)    //конструктор, инициализирующий временную диаграмму
    {                   //постоянным уровнем сигнала на максимальную длительность
        for (int i=0;i<maxx;i++) 
        {
            mas[i].s=ss;
            mas[i].d=maxsost;
        };
    };
 
    diagram(string ss)  //конструктор, инициализирующий временную диаграмму
    {                   //сигналом, представленным строкой символов
        int j=0;
        int k=0;
        sost st, st1;
        for (int i=0;i<maxx;i++)
        {
            mas[i].d=0;
        };
        if (ss[0]==48) {st=s0;}
        else
            if (ss[0]==49) {st=s1;}
            else {st=sX;}
        for (int i=0;i<ss.length();i++)
        {
            mas[k].s=st;
            if (ss[i]==48) {st1=s0;}
            else
                if (ss[i]==49) {st1=s1;}
                else {st1=sX;}
            if (st1==st) {j++;}
            else 
            {
                if (ss[i]==48) {st=s0;}
                else
                    if (ss[i]==49) {st=s1;}
                    else {st=sX;}
                mas[k].d=j;
                k++;
                j=1;
            };
        };
        mas[k].d=j;
        mas[k].s=st;
    };
 
    diagram(diagram& copy)  //конструктор копирования
    {
        for (int i=0;i<maxx;i++)
        {
            mas[i].d=copy.mas[i].d;
            mas[i].s=copy.mas[i].s;
        };
    };
 
 
     diagram &operator=(diagram &dd)        //переопределение экземпляра класса 
    {                                   //оператор присваивания
        diagram a;
        for (int i=0;i<maxx;i++)
        {
            a.mas[i].d=dd.mas[i].d;
            a.mas[i].s=dd.mas[i].s;
        };
        return a;
    };
 
};
std::ostream& operator<<(std::ostream& os, diagram& dd) //вывод
{
    for (int i=0;i<maxx;i++)
    {
        for (int j=0;j<dd.mas[i].d;j++)
        {
            if (dd.mas[i].s==s0) {os<<"0";}
            else
                if (dd.mas[i].s==s1) {os<<"1";}
                else {os<<"X";};
        };
    };
    return os;
}
int main()
{
    diagram diag1("0011XXXX00");
    diagram diag2("0011");
    diagram d=diag1;
           d=diag2;
    std::cout<<d;
    Console::ReadLine();
    return 0;
}
т.е. d=diag2 не изменяет значение d, а остаётся равным diag1
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru