Loading...
Jovanna avatar Jovanna 186 Точки

C++ Advanced, 08_03_TypedStream - Някои детайли

Здравейте,

извинявам се, че питам пак за предишните задачи, но има някои детайли, които не разбирам и не мога да продължа напред докато не си ги изясня:

1/ защо полето не може да е  std::istream stream; ?

2/ Защо не можем да подадем в конструктора const референция към стринга?

3/ Какво връща this->   , Защо синтактсисът не е:  this->stream.operator>>(item).stream.good() 

class TypedStream {
protected:
    std::istringstream stream;     //ЗАЩО НЕ istream  ?
public:
    //TypedStream( const std::string& input) : stream(input) {}
    TypedStream( std::string input) : stream(input) {}             //ЗАЩО КОПИЕ ?

    virtual TypedStream<T>& operator>>(T& t) { return *this; }
    //virtual TypedStream<T>& operator>>(T& t) = 0;

    std::vector<T> readToEnd() {
        std::vector<T> v;
        T item;
//        while (this->stream.operator>>(item).stream.good()) {        //ЗАЩО ?
        while ((this->operator>>(item)).stream.good()) {

Благодаря.

Тагове:
0
C++ Programming
Jovanna avatar Jovanna 186 Точки

Благодаря! 

това означава ли , че в случая от задача 2, след като базовият клас има поле istream, ще може да агрегира и от файлове, примерно, като му се подаде ifstream от main() и се разпишат съответните наследяващи класове ?

Поздрави!

0
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Да, щом получава istream, а не конкретен stream - от main може да му подадеш и cin, и някой istringstream, и някой ifstream, ще работи. Това пак е заради наследяването, istringstream, ifstream и прочие наследяват istream, съответно нещо, което работи с istream, може да работи с който и да е stream за четене.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.