Форум: "Потрепаться";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизПомогите начинающему в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c