2015-04-16 2 views
0

Как я могу выполнить этот код ниже данных в C++:Как переопределить оператор = для строк в C++

mystring a; 
a="A test text"; 

«MyString» является классом, который определяется (сам) для струнных и других операторов подобный +, ==, >>, < < и т. д. определены в этом классе. Как определить функцию (функцию друга с классом), которая «=» выполняет то, что я упомянул.

если были ошибки диктовки, простите меня.

+2

Как это делается в STL? http://www.cplusplus.com/reference/string/string/operator=/ – myaut

+0

Не создавайте собственные строковые классы, используйте 'std :: string'. – Griwes

+0

Хорошие ответы ниже, но как только вы построили свой класс строк, внимательно просмотрите его, сравните его с 'std :: string', bin the first и используйте последний. – Bathsheba

ответ

1

Не с функцией друга. Вам необходимо перегрузить оператор присваивания:

mystring &operator = (mystring const &other) { 
    // ... 
    return *this; 
} 

Заметьте, что вы также нужен конструктор преобразования, который принимает в C-строки:

mystring(char const *str) { 
    // ... 
} 
+1

Если бы существовало 'mystring (const char *)' ctor (что является безопасным допущением), не исключает ли этого необходимость в специальном 'mystring :: operator = (const char *)'? Проблемы с эффективностью. –

+0

@PeterSchneider Подождите, я прочитал ваш комментарий неправильно три раза подряд. Здесь нет оператора присваивания из 'char const * ':) – Quentin

+0

Oh. Правильно! Вы предложили то, о чем я тоже думал. Мне нужно задать этот вопрос @Bathsheba, который предложил «mystring :: operator = (const char *)». –

2

Вам нужно определить

mystring& operator=(const char*) 

для выполнения этого конкретного задания.

Обратите внимание, что это перегрузка возвращает ссылку на себя. Это позволяет использовать составные назначения.