Наследование от std :: string

0

Поэтому у меня есть следующее:

class myString : public std::string{

public:

    void translate(){
        std::string phrase = blarg;

        ... Code ...

        blarg = phrase;
    }

Теперь я знаю, что это не blarg, но что я должен был бы здесь, чтобы получить доступ к строке, связанной с наследованием строки myString?

В основном за пределами этого я мог бы сделать:

myString phrase;
phrase = "Roar";

Итак, как мне получить доступ к "Roar" в моей функции?

Все включено правильно.

  • 1
    std::string phrase = *this; ?
  • 9
    Вы не должны этого делать.
Показать ещё 10 комментариев
Теги:
inheritance
stdstring

2 ответа

0
Лучший ответ

Просто обратитесь к объекту с помощью this указателя.

class myString : public std::string
{
    public:

    void translate()
    {
        std::string phrase = *this;
        /*
        ... Code ...
        */
        *static_cast<string*> (this) = phrase;
    }
}
  • 0
    это действительно не нравится делать * это = фраза; ... есть идеи? У меня есть класс в его собственном пространстве имен, это может быть проблемой?
  • 0
    @blackbeltJR: исправлено. Это скелетный класс. Обычно, если вы сделали что-то подобное, вам нужен конструктор преобразования для myString::myString(std::string const & ref) : std::string(ref) { }
Показать ещё 3 комментария
0

Вы не должны это делать.

Но вот код

#include <iostream>
#include <string>
#include <vector>

class myString : public std::string{
public:
    using std::string::string; // inheriting the constructors from std::string
    void translate(){
        // 'std::string phrase = *this' won't work because no such constructor takes 'myString' exist
        std::string phrase(this->c_str(), this->length()); 

        phrase += "2";

        // operator= won't work because type doesn't match
        // it is expecting 'myString' type but not 'std::string'
        this->assign(phrase); // use assign instead of operator=
    }    
};

int main()
{
    myString m = "test";
    std::cout << m << '\n'; // test
    m.translate();
    std::cout << m << '\n'; // test2
}

онлайн-демонстрация

  • 0
    Глядя на ответ над своим, почему не * это = фраза; работай? Я попытался это-> назначить (фраза), которая работает, так что спасибо.
  • 0
    если вы прочитаете сообщение об ошибке, он скажет вам точно, что не так
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню