Назначение заключается в создании класса, который реализует динамическую строку (массив символов с нулевым символом в конце). Конструктор по умолчанию должен создавать пустой массив, а также должен быть перегруженный конструктор, который создает массив размером n. Также должна быть функция это увеличит массив до большего размера (он сказал, что это должно быть в классе, но мы не будем использовать его до более позднего назначения). Мы также должны создать две версии этого класса. В одной версии мы будем перегружать оператор эквивалентности как функцию-член, а во второй версии мы будем перегружать оператор эквивалентности как функцию, не являющуюся членом.
Что-то мне кажется странным, потому что это кажется легким.
Для версии члена я установил, чтобы это возвратило истину, если два размера класса были равны.
bool CSTR::operator ==(const CSTR & rhs) {
return (size == rhs.size);
}
Для не-членской версии я просто создал функцию-член, которая возвращает ее размер в виде целого числа, а затем сравнивает их, когда оператор перегружен.
bool operator ==(const CSTR2 & CSTR2_1, const CSTR2 & CSTR2_2) {
return (CSTR2_1.getSize() == CSTR2_2.getSize());
}
Я просто немного испуган, чтобы включить это без какого-либо внешнего участия, потому что мое решение кажется слишком простым по сравнению со всем, что мы обсуждали в классе. Я знаю, что мы собираемся расширить эту программу для более позднего задания, но если кто-то из вас увидит что-то, что я здесь упускаю, какой-то вклад будет потрясающим.
Вот код, который я пытаюсь использовать для сравнения cstring. Примечание: в описании присваивания нет ничего, что говорило бы о вводе значений в cstrings.
#include "CSTR.h"#include <cstring>
using namespace std;class CSTR {
public:
CSTR();
CSTR(unsigned int n);
~CSTR();bool operator ==(const CSTR & rhs);
private:
unsigned int size;
char *elems;
bool grow(unsigned int newSize);
};
=================================
CSTR::CSTR() {
size = 0;
elems = new char [0];
}
CSTR::CSTR(unsigned int n) {
if (n > 0) {
size = n;
elems = new char [size];
}
else {
size = 0;
elems = new char [0];
}
}
CSTR::~CSTR() {
delete [] elems;
}
bool CSTR::operator ==(const CSTR & rhs) {
return ((elems == rhs.elems) == 0);
}
Я инициализировал два объекта CSTR с разными размерами, и когда я проверяю на эквивалентность, он возвращает, что они равны.
Задача ещё не решена.