Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.02;
Скачать: CL | DM;

Вниз

Помогите начинающему в C++ с перезагрузкой операций   Найти похожие ветки 

 
michael ©   (2003-09-14 23:10) [0]

Необходимо реализовать класс как динамический массив типа char и перезагрузить операцию int() - мощность множества. У меня что-то не получается:
#include <iostream>
using namespace std;

#define maxlength 10

class setchar{
private:
char *s; // указатель на начало массива
int currentlength; // текущий размер массива
public:
setchar() {
s = new char [maxlength];
currentlength = 0;
}
setchar(setchar &cs) { // коструктор копии
s = new char [maxlength];
currentlength = cs.length();
for (int i =0; i < currentlength; i++)
s[i] = get(i);
}
~setchar() {
delete [] s;
}
char get(int i) {
return s[i];
}
int length() {
return currentlength;
}
void print() {
for (int i =0; i < currentlength; i++)
cout << s[i] << " " ;
}
void operator +(char a) { // добавить элемент в множество
if (currentlength < maxlength) {
s[currentlength] = a; // необходимо сделать проверку есть ли уже этот элемент в множестве
currentlength++;
} else cout << "adding error" << endl;
}
setchar operator *(setchar ss) { // пересечение множеств
int i,j;
setchar tmp;
for ( i = 0; i < currentlength; i++)
for ( j =0; j < currentlength; j++)
if (s[i] == get(j)) tmp + s[i];
return tmp;
}
//int operator int()(setchar ss) { // мощность множества
// return ss.length;
//}
};

PS: И вообще если не трудно проверьте код, а то я C++ только начал изучать.


 
michael ©   (2003-09-15 05:48) [1]

up


 
michael ©   (2003-09-15 07:04) [2]

up


 
Некрофил-затейник__ ©   (2003-09-15 07:28) [3]

RTFM http://lib.ru/CPPHB/cpptut.txt
эту книгу еще и как справочник можно использовать
если ты не знаком с С(старым)
то
RTFM http://cclib.nsu.ru/projects/gnudocs/texts/kernigan.html
еще можеш поискать Шилда, Стивенса и Богатырева

Если ты не вкурсе что такое ООП то найди Гради Буч(автора так зовут)

ЗЫ
Всем раздать лопаты(зри в корень,копай в глубь).


 
michael ©   (2003-09-15 07:55) [4]


> Некрофил-затейник__ © (15.09.03 07:28) [3]

какие книги читать я и сам знаю


 
Suntechnic ©   (2003-09-15 08:31) [5]

>michael ©
По классу: Не совсем понятно где же "динамичность" реализованного класса? Если нужен пример интерфейса подобных классов посмотри на STL-кие string и vector.

По коду:
1. Оператор перегруженный оператор (int) не имеет параметров и возвращаемого значения. Т.е. прототип должен быть следующим:
operator int()

2. Совсем не понятно что есть ss в приведенной реализации operator int()

3. В операторе operator * тоже какая то ерунда написана. Переданный параметром объект ss вообще нигде не используется.

И ещё по мелочи...

4. В ф-ции get надо бы проверять возможность выхода за пределы массива. Правда иногда это не делают умышленно с целью улучшения производительности, но тогда доступ, как правило, без проверки организуют с помощью перегруженного оператора индексации, а в доступе с помощью ф-ции проверку всё-таки делают. (например так реализован STL-ский vector) .

5. Конструктор копирования надо бы всё-таки объявлять как принимающий константную ссылку.

6. В конструкторе копирования копирование элементов осуществляется с помощью обычного for...
Обрати свой взор на ф-цию memcpy.

7. Все методы, которые не модифицируют объект (например length) объявляй со спецификатором const.


 
Некрофил-затейник__ ©   (2003-09-15 08:42) [6]

michael
как ты хочеш научится ни чего не читая?



Страницы: 1 вся ветка

Текущий архив: 2003.10.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
1-3941
Александр из Минска
2003-09-17 23:19
2003.10.02
Удаление файлов в <B>Windows NT</B>


1-3966
Unknown
2003-09-20 10:42
2003.10.02
функция format


6-4026
Dysan
2003-08-01 15:39
2003.10.02
проблема с FastNet smtp


3-3770
andrey__
2003-09-11 17:16
2003.10.02
Одно из полей в сумме равно Null


14-4054
cyborg
2003-09-15 21:26
2003.10.02
Страна непуганных буратин