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

Надо переделать метод класса. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 5 СПОСОБОВ задержки времени: Что скажете? http://www.cyberforum.ru/cpp/thread75979.html
В Linux работают 100%, в Windows не проверял, но тоже должны работать. 1. используя nanosleep: #include <iostream> using namespace std;
C++ Нюансы динамической памяти вобщем у меня очень непонятная трабла. есть двумерный массив из объектов класса NET. в классе NET есть небольшой массив указателей на объекты класса Object. массив NET инициализируется так: NET** Object::net=new NET* ; for (int i=0;i<Object::NET_n;i++) { Object::net=new NET; for (int j=0;j<100;j++) Object::net=NET (i-500,j); } конструкторы NET: http://www.cyberforum.ru/cpp/thread75960.html
надо решить лабу по праграммированию C++
Описать структуру с именем ZNAK содержащую следующие поля: • Фамилия, имя; • Знак Зодиака; • Дата рождения (массив из трёх чисел).
C++ Строки в C++
Дано предложениею. В нем только 2 слова одинаковые . НАйти эти слова
C++ Дерево каталогов http://www.cyberforum.ru/cpp/thread75870.html
помогите разработать программу , которая выводит дерево каталогов (с нужным количеством отступов, в зависимости от уровня вложенности каталога) начиная с указанного в качестве параметра каталога. Если программе указан параметр -f (--file), программа должна выводить не только имена каталогов, но и имена файлов, которые в каталогах присутствуют. Программа по умолчанию показывает только ...
C++ помогите пожалуйста, очень СРОЧНО 1. Дана последовательность из 100 целых чисел. Определить количество чисел в наиболее длинной подпоследовательности из подряд идущих нулей. 2. Дано число. Разделить каждую цифру числа на его порядковый номер. Полученное число напечатать. 3. В одномерном массиве, состоящем из n вещественных элементов, вычислить: • количество элементов массива равных нулю; • сумму элементов,... подробнее

Показать сообщение отдельно
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
18.12.2009, 14:06     Надо переделать метод класса.
вот тебе почти полноценное описание класса действительных чисел, даже поераторы << перегружены. сделай свой класс по образу и подобию.
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
//создание класса INT - класса натуральных чисел.
#include <iostream>
#include <conio.h>
using namespace std;
 
class INT {
      private:
              int i;
      public:
             INT(){i=0;cout <<"use INT()\n";}
             INT(int ii){i=ii;cout <<"use INT(int)\n";}
             // если в следующий оператор передавать аргумент по ссылка, то обычное число туда не войдет :), типа (int &ii)
             INT &operator=(const int ii){i=ii;cout <<"use INT=(const int)\n"; return *this; } //aa@bb aa.operator@(bb);
             INT &operator=(const INT &I){if (this!=&I)this->i=I.i;cout <<"use INT=(const INT)\n";}
             //аксессор, оне не нужен, ибо функйци которые могли бы в нем нуждаться обявлены дружественными классу INT.
             //int get()const{return i;}
             
             //без этого оператора, в a=c+3 использовался бы не он, а тот что ниже него.
             INT &operator+(int ii){INT*p=new INT(ii+i); cout <<"use INT+(int)\n";return *p;}
             //создание обектов в динамической памяти - очень важно. Так мы не портим сами обьекты из которых вызывались операторы.
             // что бы не испортить A: INT A(x); INT B(y); INT C; C=A+B; вернем в C ссылку на обект в динамической памяти.
             INT &operator+(INT &I){INT*p=new INT(i+I.i);cout <<"use INT+(INT)\n";return *p;}
             
             //префиксный инкремент, aa.operator++();, без входного аргумента все операторы префиксные по умолчанию.
             INT &operator++(){i+=1;cout <<"use INT++()\n";return *this;}
             //постфиксный инкремент, aa.operator++(bb); оба оператора возвращают себя, иначе невозможно j=i++.
             INT &operator++(int ii){i+=1;cout <<"use INT++(int)\n";return *this;}
             
             INT &operator*(int ii){INT*p=new INT(i*ii); cout <<"use INT*(int)\n"; return *p;}
             INT &operator*(INT &I){INT*p=new INT(i*I.i);cout <<"use INT*(INT)\n"; return *p;}
             
             INT &operator-(int ii){INT*p=new INT(ii-i);cout <<"use INT-(int)\n";return *p;}
             INT &operator-(INT &I){INT*p=new INT(i-I.i);cout <<"use INT-(INT)\n";return *p;}
             
             INT &operator--(){i-=1;cout <<"use INT--()\n";return *this;}
             INT &operator--(int ii){i-=1;cout <<"use INT--(int)\n";return *this;}
             
             INT &operator/(int ii){INT*p=new INT(i/=ii); cout <<"use INT/(int)\n"; return *p;}
             INT &operator/(INT &I){INT*p=new INT(i/=I.i); cout <<"use INT/(int)\n"; return *p;}
             
             operator int(){cout <<"use int()\n";return i;}
             
             //унарынй префексный * возвращает ссылку как и положено.
             INT * operator*(){cout <<"use INT* *()\n";return this;}
             
             //унарные минус
             INT &operator-(){INT*p=new INT(-i); cout <<"use INT-()\n";return *p;}
             
             friend int operator+(int i, INT &I);
             friend int operator*(int i,INT &I);
             friend int operator-(int i, INT &I);
             friend int operator/(int i,INT &I);
             friend istream &operator>>(istream & in,const INT &I);
             friend ostream &operator<<(ostream &out,const INT &I);
};
//этот оператор лучше, потому что универсальние, он полезен при int = int + INT;
int operator+(int i, INT &I)
{
    cout << "nic int+(int,INT)\n";
    return i+I.i;//имеем доступ к закрытым полям, ибо оператор обьявлен дружестыенным к классу INT
}
//а этот оператор только при INT = int + INT
/*
INT operator+(int i, INT &I)
{
    cout << "nic INT=(int,INT)\n";
    return INT(i+I.get());
}*/
int operator*(int i,INT &I)
{
    cout << "nic int*(int,INT)\n";
    return i*I.i;
}
 
int operator-(int i, INT &I)
{
    cout << "nic int-(int,INT)\n";
    return i-I.i;
}
 
int operator/(int i,INT &I)
{
    cout << "nic int/(int,INT)\n";
    return (int)i/I.i;
}
istream &operator>>(istream & in,const INT &I)
{
        in >> I.i;
        return in;
}
ostream &operator<<(ostream &out,const INT &I)
{
        out << I.i;
        return out;
}
 
//эту функцию лекго можно использовать для вычисления обьектов INT, благодая перегруженным int() и оператору присваивания INT=int.
//непосредственно в рекурсии будет участвровать только int числа.
int fuc(int i)
{
    if(i)return i*fuc(i-1);
    else return 1;
}
 
//если передавать в pow() аргумент про ссылкие, типа так pow(INT &I), 
//то конструктр не сможет создать временный обьект из числа типа int, pow(4) например не сработает.
INT pow(INT I)
{
    return I*I;
}
 
int main()
{
    //#define int INT // %)
    cout << "1 INT a; ";        INT a;
                                cout <<"a="<< a << endl;
    cout << "2 INT b(6); ";     INT b(6);
                                cout << "b="<<b << endl;
    cout << "3 INT c=b; ";      INT c=b;//здесть используется не перегруженный оператор =, а стандартный.
                                cout << "Standart =\n";
                                cout << "c="<<c << " d=" << b << endl;
    cout << "4 a=c; ";          a=c;
                                cout << "a="<< a <<" c="<< c << "\n";
    cout << "5 INT d=2 ";       INT d=2;
                                cout << "d=" << d << endl;
    cout << "6 a=c+3; ";        a=c+3;
                                cout << "a=c+3, a=" << a << endl;
    cout << "7 b=3+a ";         b=3+a;
                                cout << "b=3+a, b=" << b << endl;
    cout << "8 d=a+b ";         d=a+b;
                                cout << "d=" << d << endl; 
    cout << "9 int i=23; ";     int i=23;
    cout << "10 d+i ";          d+i;
                                cout << "d=" << d << endl;
                                cout << "befor X++, a=" << a << endl;
    cout << "11 a++ ";          a++;
                                cout << "after X++, a=" << a << endl;
 
                                cout << "befor ++X, a=" << a << endl;
    cout << "11 ++a ";          ++a;
                                cout << "after ++X, a=" << a << endl;
 
                                a=3; b=1; c=0; d=-2; i=10;
                                cout << "a=3; b=1; c=0; d=-2; i=10;\n";
                                
    cout << "12 c=a*3+i; ";     c=a*3+i;
                                cout << "a=" << a << " c=" << c << " i=" << i << endl;
                                cout << "for culc (c+b)*i+(d*2) was don: \n";
                                cout << "(c+b)*i-(d*2)=" << (c+b)*i-(d*2) << endl;
    cout << "a=" << a << " b=" << b << " c=" << c << " d=" << d << " i=" << i << endl;
    cout << "13 a=4*d; ";       a=4*d;
                                cout << "a=" << a << endl;
cout << "14 d=(a/b)*(c/3); ";   d=(a/b)*(c/3);
                                cout << "d=" << d << endl;
    cout << "15 i=3/b; ";       i=3/b;
                                cout << "i=" << i <<endl;
    cout << "16 i=8+b; ";       i=8+b;
                                cout << "i=" << i <<endl;
    cout << "17 i=b+1; ";       i=b+1; //очень тонкое место... здесь используется перегруженный int();
                                cout << "i=" << i <<endl;
    cout << "b=1,c=0,c=b++\n";  b=1;
                                c=0;
                                c=b++;
                                cout << "c=" << c << endl;
                                
                                cout<< "d=4;"<< endl;
                                d=5;
                                cout << "fuc cuclc\n";
                                //int fuc(int);
                                cout << "fuc(d)=" << fuc(d) << endl;
    cout << "18 c=fuc(d); ";    c=fuc(d);
                                cout << "c=" << c << endl;
                                
                                INT *IP;
                                const int max=5;
                                INT I[max];
                                for(int i=0;i!=max;i++)I[i]=i;
                                IP=I;
                                for(INT i=0;i!=max;i++)//здесь INT i в роле счетчика!!!! :)
                                {
                                        cout << "*IP ppoint to I[" << i << "]=" << *IP << endl;
                                        IP++;
                                }
    cout << "19 IP=*d; ";       IP=*d; // пример использования унарного *
                                cout << "*IP=" << *IP << endl;
                                
                                INT *IPnum=new INT[max];
                                for(INT i=0;i!=max;i++){IPnum[i]=(i + I[4-i]);}
                                
                                for(int i=0;i!=max;i++)cout << I[i] <<" " << *IPnum[i] <<"->" <<*IPnum++<< endl;
    cout << "sizeof(INT)=" << sizeof(INT) << "  sizeof(int)=" << sizeof(int) << "  sizeof(IP)=" << sizeof(IP)<< endl;
    int im[max];
    cout << "sizeof(I)=" << sizeof(I) << "  sizeof(im)=" << sizeof(im) <<"  sizeof(IPnum)=" << sizeof(IPnum)<< endl;
    delete [] IPnum;
    
                                cout << "c=" << c << endl;
    cout << "20 d=pow(c); ";    d=pow(c);
                                cout << "d=" << d << endl;
                                //INT pow(INT);
    cout << "21 int j=pow(4); ";int j=pow(4);
                                cout << "j=" << j << endl;
                                
                                
    cout << "22 INT AA=5; ";    INT AA=5;
    cout << "23 INT BB=4; ";    INT BB=4;
    cout << "24 INT CC; ";      INT CC;
                                cout << "CC=" << CC <<" AA=" << AA << " BB=" << BB << endl;
                                CC=AA+BB;
                                cout << "CC=" << CC <<" AA=" << AA << " BB=" << BB << endl; 
                                
    cout << "25 AA=BB-CC; ";    AA=BB-CC;
                                cout << "CC=" << CC <<" AA=" << AA << " BB=" << BB << endl;
    cout << "26 CC=-AA; ";      CC=-AA;
                                cout << "CC=" << CC <<" AA=" << AA << endl;
    cout << "27 BB=AA*(-AA); "; BB=CC*(-AA);
                                cout << "CC=" << CC <<" AA=" << AA << " BB=" << BB << endl;
                                CC=AA=BB=0;
                                cout << "CC=" << CC <<" AA=" << AA << " BB=" << BB << endl;
 
    getch();
}
только сотри cout из реализации перегрузки операторов, они там чтобы на кран выводилось какой оператор используется.
 
Текущее время: 04:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru