Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Помогите понять условие задания

#cpp #алгоритм



  Создать иерархию классов представляющих простое наследование. Базовый
  класс – строка символов (char *). Производный класс – методы,
  работающие с данными базового класса. Реализовать в производном классе
  метод – поиска и удаления самого короткого слова в строке базового
  класса


Где мне нужно искать и удалять слово? Я реализовал наследование, создается класс
на основе базового. Я инициализировал базовый и производный. Теперь где мне нужно искать
и удалять слово? В производном, в переменной производного, или в производном, в переменной
базового? В задании написано: "в строке базового класса", мне нужно из производного
произвести поиск и удаление в базовом, или это означает что я унаследовал переменную
базового и теперь в производном должен это сделать в переменной производного?

#include 
#include 
#include 

using namespace std;

class FirstClass {
    protected:
        char* str_value;
    public:
        //FirstClass() {}

        FirstClass(const char* value = ""):str_value(0) {
            set(value);
        }

        FirstClass(const FirstClass &obj):str_value(0) {
            set(obj.str_value);
        };

        ~FirstClass() {delete[] str_value;}

    void set(const char* value) {
        delete[] str_value;
        str_value = new char[strlen(value)+1];
        strcpy(str_value, value);
    }

    const char* get() const {
        return str_value;
    }
};

class SecondClass : public FirstClass {
    public:
        SecondClass(const char* str_value = "") : FirstClass (str_value) {}
    void findShortestWord()
    {
        str_value = "kokoko";
    }
 };

int main() {
    FirstClass F_object("aaaaaaaaaa");

    printf("\n%s", F_object.get());

    F_object.set("bbbbbbbbbb");

    printf("\n%s", F_object.get());

    FirstClass F_object2 = F_object;

    SecondClass S_object();

    printf("\n%s", F_object.get());

    return 0;
}

    


Ответы

Ответ 1



Теперь создаете метод class SecondClass : public FirstClass { public: SecondClass(const char* str_value = "") : FirstClass (str_value) {} void findShortestWord() { //здесь работаем с str_value } }; И работаете на прямую с полем str_value. Но это не очень хорошо. Лучше скрыть это поле в private и реализовать в базовом классе простейшие операции, например доступ по индексу, и так далее. А уже в производном классе можно реализовать более специфическую логику вроде поиска и удаления самого короткого слова. И методы производного класса будут использовать только функции базового.

Комментариев нет:

Отправить комментарий