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

перегрузка оператора присваевания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычисление корней многочлена http://www.cyberforum.ru/cpp-beginners/thread332076.html
нужно написать программу которая вычисляет корни многочлена. Степень многочлена мы задаём.
C++ повторное вполнение действия Мне стал интересно как сделать чтобы например дисковод окрывался и закрывался каждые 30 секунд в течении 10 минут пожалуста выложите исходники с комментариями http://www.cyberforum.ru/cpp-beginners/thread332068.html
Socks5 Server C++
Здраствуйте! Необходима для личных целей написать Socks5 Server с авторизацией. Помогите, с чего начать, што использовать, может какие библиотеки? Зарание спасибо =)
Добавление собственной библиотеки C++
Привет! Помогите пожалуйста суть такова. Я сделал библиотеку, как опишу ниже. Суть вопроса, объясните пожалуйста по шагам как ее добавлять к новым проектам, переписывать руками, типа вставлять...
C++ из чара в стринг http://www.cyberforum.ru/cpp-beginners/thread332021.html
char gorod; stringstream ss; string st; ss << gorod; ss >> st; я запутался малек, пытаюсь выбить st в edit оно мне орет что cannot convert string to ansistring + беда, int n=st.length();...
C++ массивчик не понял сути, пользователь сам должен вводить массив? Написать программу, которая предлагает пользователю ввести число и, затем подсчитывает, сколько раз это число встречается в массиве. подробнее

Показать сообщение отдельно
DigsiL
10 / 10 / 1
Регистрация: 14.01.2011
Сообщений: 113

перегрузка оператора присваевания - C++

12.07.2011, 11:19. Просмотров 426. Ответов 1
Метки (Все метки)

Не могу разобраться как перегрузить оператор присваивания так чтобы выводило правильно то есть

a = 15;
c = 7.8;
d = "50";
d=a+d;
//ответ:
65

а данный код выводит
d=a+d;
//ответ:
65
50


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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <iostream>
#include <windows.h>
using namespace std;
class Var 
{
private:
    int num;
    double real;
    char *str;
public:
    Var (int temp)
    {
        num=temp;
        real=NULL;
        str=NULL;
    }
    Var (double temp)
    {
        num=NULL;
        real=temp;
        str=NULL;
    }
    Var (char *temp)
    {
        num=NULL;
        real=NULL;
        str=new char [strlen(temp)+1];
        strcpy(str,temp);
    }
    void Show ()
    {
        if (num)
        {
            cout<<num<<endl;
        }
 
        if (real)
        {
            cout<<real<<endl;
        }
        if (str)
        {
            cout<<str<<endl;
        }
    }
    const Var operator + (Var & temp)
    {
 
        //Если правая переменая типа INT
        if (temp.num)
        {
                //int+int
            if (num)
            {
                return num + temp.num;
            }
                //double+int
            if(real)
            {
                return real + (double)temp.num;
            }
                //char+int
            if(str)
            {
                char t[10];
                itoa(temp.num,t,10);
                char *tmp=new char [strlen(str)+ strlen(t)];
                strcpy(tmp,str);
                strcat(tmp,t);
                return tmp;
            }
        }
 
        //Если правая переменая типа double
        if(temp.real)
        {
                //int+double
            if (num)
            {
                return Var (num + (int)temp.real);
            }
                //double+double
            if (real)
            {
                return Var(real+real);
            }
                //char+double
            if (str)
            {
                char t[10];
                sprintf(t, "%.4g",temp.real);//Функция переводит тип данных double в char 
                char *tmp=new char [strlen(t)+strlen(str)+1];
                strcpy(tmp,str);
                strcat(tmp,t);
                return Var(tmp);
            }
        }
        //Если правая переменая типа char
        if (temp.str)
        {
            if (num)
            {
                return Var (num+atoi(temp.str));
            }
        }
 
    }
 
    const Var operator = (const Var & obj)// перегрузка оператораа присваевание
    {
        if(obj.str)
        {
            str=new char [strlen(obj.str)+1];
            strcpy(str,obj.str);
            return Var(str);
        }
 
        if(obj.num)
        {
            return Var(num=obj.num);
        
        }
 
        if (obj.real)
        {
            return Var (real=obj.real);
        }
    }
 
    Var (const Var & obj)//Конструктор копирования
    {
        str=new char [strlen(obj.str)+1];
        strcpy(str,obj.str);
    }
 
    ~Var()
    {
        delete []str;
    }
};
void main ()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    Var a = 15;
    Var b = "Hello";
    Var c = 7.8;
    Var d = "50";
    d=a+d;
    d.Show();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru