Форум программистов, компьютерный форум CyberForum.ru

Перегрузка << для вектора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Действия со строками http://www.cyberforum.ru/cpp-beginners/thread210380.html
16.Составить программу на СИ. Где дан текст. Определить, встречается ли в нем заданное слово, если да – то сколько раз.
C++ Вычислить площадь фигуры ограниченной линиями Ребят помогите плс!Задачка никак не получается((( Постановка задачи. Вычислить площадь фигуры ограниченной линиями f1(x) и f2(x) (табл.1). Для вычисления площади фигуры ограниченной линиями можно использовать итерационное выражение Si+1= Si + (f2(xi) – f1(xi)) dx , где S0 = 0 , x0 = 0 и i = 0, 1, 2...n . Я прикрепляю картинку с графиком и моей функцией..Нужно сделать через цикл while... http://www.cyberforum.ru/cpp-beginners/thread210370.html
Ввести строку и слово. Определить и вывести, сколько раз встречаются в строке буквы, перечисленные в слове. C++
Ввести строку и слово. Определить и вывести, сколько раз встречаются в строке буквы, перечисленные в слове. Ha Cu. Заранее спасибо за помошь.
C++ Одиночное наследование классов.
Реализовать наследование классов, их конструкторов, и если необходимо деструкторов, для своего варианта. Продемонстрировать в программе работу функций классов. Создать класс Fruit, содержащий следующие элементы: - поле «зрелость» int Ripeness; - поле «название» char* Name; - поле «цвет» char* Color; - метод получения зрелости int GetRipeness() ; - метод получения цвета char* GetColor();...
C++ Перегрузка функций http://www.cyberforum.ru/cpp-beginners/thread210364.html
Для соответствующего класса, перегрузить арифметические операции(+,-,*,/). При перезгузке арифметические действия должны выполняться относительно только числовых полей!!! Создать несколько объектов класса и проинициализировать их с помощью конструктора с параметрами. Создать несколько дополнительных объектов таким образом, чтобы: - первый объект являлся суммой двух других объектов; - второй...
C++ Некомпелируеца программа на DeviceIoControl Здраствуйте, помогите пожалуйсто, нашел в нете код, а он некомпелируеца, вот код: #include <cstdlib> #include <iostream> #include "windows.h" #include "iostream.h" typedef struct DIOCRegs { DWORD reg_EBX; DWORD reg_EDX; DWORD reg_ECX; DWORD reg_EAX; подробнее

Показать сообщение отдельно
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
14.12.2010, 13:14  [ТС]     Перегрузка << для вектора
Цитата Сообщение от Aye Aye Посмотреть сообщение
нет, последний временный объект не будет содержать все строки. Почему он должен? Ведь из него вызовется всего один оператор для одной строки. Каждый раз временный объект новый - сконструированный конструктором по умолчанию. Наверно тебя вводит в заблуждение указатель this? Он для каждого объекта свой собственный.
у вас тут все понятно, каждый раз конструируется новый объект, а у меня объект (я так предполагаю) в ретурне просто копируется, но не конструируется, чему свидетельствует только один вызов конструктора(вначале):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
 
using std::cout;
using std::cin;
using std::endl;
 
typedef std::vector<std::string> str_vect;
 
 
class my_vector : public str_vect
{
    static int i;
    std::vector<std::string>::iterator p_iter;
public:
    my_vector() { cout << "Object created" << endl; }
    ~my_vector() { cout << "Object destroyed" << endl; }
    my_vector operator<<(std::string str)
    {
        cout << "Operator << " << endl;
        this->push_back(str);
        ++i;
        
        //vector output 
        cout << i << ". ";
        p_iter = this->begin();
 
        while (p_iter != this->end())
        {
            cout << *p_iter << '\t';
            ++p_iter;
        }
 
        cout << endl;
        return *this;
    }
};
 
int my_vector::i;
 
int main ()
{
    my_vector str_vect;
 
    // fill string vector
    str_vect << std::string("zero") << std::string("one") << std::string("two") << std::string("three") << std::string("four")
        << std::string("five") << std::string("six") << std::string("seven") << std::string("eight") << std::string("nine");
 
 
    cout << str_vect.size() << endl;
 
    system("PAUSE");
    return 0;
 
}
и поэтому каждый оператор << посредством указателя this и ф-ции push_back добавляет к уже имеющейся строке новую

Если сделать так :
C++
1
2
str_vect = str_vect << std::string("zero") << std::string("one") << std::string("two") << std::string("three") << std::string("four")
        << std::string("five") << std::string("six") << std::string("seven") << std::string("eight") << std::string
то после
C++
1
cout << str_vect.size() << endl;
выведет 10
Миниатюры
Перегрузка << для вектора  
 
Текущее время: 11:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru