2013-12-23 5 views
1

Alright, я что-то для удовольствия кодирования, но вот проблема:Как изменить приватную переменную путем чтения текстового файла

У меня есть класс с частной строковой переменной, которую я хочу изменить, но я хотите изменить его на строку, которую я прочитал из текстового файла. Нет другого пути, кроме как создать отдельную строку для получения текстового файла, а затем использовать функцию-член для изменения частной переменной?

это мой первый вопрос здесь, так скажите мне, если мне нужно уточнить вещи

+1

Что бы вы хотели, чтобы иметь возможность использовать строковую переменную класса? – DavidO

+0

Вы можете использовать переменную в качестве адресата для функции 'fread', которая читает из файла – nrathaus

+1

частные переменные могут быть прочитаны и записаны с использованием функций-членов, поэтому, если вы не хотите создавать новую переменную, вам нужно написать функцию уровня класса для чтения файла и сохранения требуемого значения в частной переменной –

ответ

0

Как об изменении этой переменной в любой функции члена?

Функция-член будет иметь право редактировать свои частные переменные-члены.

1

Частные члены предназначены для управления с использованием общедоступных методов класса. Если вам не нужно делать что-то сложное с ними, вполне нормально создавать геттеры и сеттеры - методы просто читать или писать частные переменные (также можно проверить значение или так).

#include <string> 

class A 
{ 
private: 
    std::string privateString; 

public: 
    std::string getPrivateString() const { return privateString; } 
    void setPrivateString(const std::string& newString) { privateString = newString; } 
}; 

Если ваш класс должен работать с файлами, вы можете создать публичный метод, чтобы прочитать строку из файла и сохранить его в частный член непосредственно.

+1

Обратите внимание, что @Melebius использовал семантику pass-by-value для своих методов получения и настройки. В зависимости от вашего компилятора это может привести к хорошему повышению производительности (см. [Want Speed? Pass by Value.] (Http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/)). В зависимости от использования класса A вы можете вместо этого использовать pass-by-reference, и в этом случае вы должны соответствующим образом размещать конструкторы const, чтобы избежать непреднамеренного изменения содержимого вашего класса. 'const std :: string & getPrivateString() const' и' void setPrivateString (const std :: string & newString) '. – Rob

+0

Если бы я мог nitpic, не могли бы вы разместить пост const после определения getPrivateString()? Благодарю. – Rob

+0

@Rob ОК, я добавил ссылки и 'const' квалификаторы к моему примеру, хотя мое первоначальное намерение заключалось в том, чтобы написать минимальный, но рабочий код. Тем не менее, я все еще сохранял метод getPrivateString() ', возвращающий значение, потому что вы можете работать с ним с меньшими ограничениями. Могут быть даже оба геттера вместе. – Melebius

Смежные вопросы