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

Как работает ссылка с объектами, классами и перегруженным оператором [] - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Error: Unresolved external 'character::character(int)' http://www.cyberforum.ru/cpp-beginners/thread612793.html
Error: Unresolved external 'character::character(int)' referenced from C:\USERS\АДМИНИСТРАТОР\DOCUMENTS\RAD STUDIO\PROJECTS\MYPROJECTS\BLOODSWORD\WIN32\DEBUG\MAINM.OBJ вот такая ошибка. исходный код: void new_game() { int klas; hist::start(); std::cin>>klas; character pers(klas); std::cout<< pers.agility;
C++ Работа программы на С++ с вебом Вообщем, хочу научиться писать программы, которые бы брали информацию из интернета, например брали погоду с gismeteo.ru, сообщали о новом письме на почте, скачививали новое видео с ютуба. Вопрос один: что для этого надо изучать? Обязательно ли знать php? Не знал, в каком разделе лучше создать данную тему, а так-как фундаментом будет с++, решил создать в этом разделе. http://www.cyberforum.ru/cpp-beginners/thread612789.html
C++ Сортировка массива
В общем програ работает без выделении памяти нормально, но как только я добавил туда указатель на массив, после компиляции и запуска ее она падает с ошибкой, помогите найти ошибку в коде..... #include <stdafx.h> #include <iostream> #include <stdlib.h> using namespace System; using namespace std;
Необработанные исключения в MS Visual 2010 C++
Причиной чего может быть это сообщение и как его решить? У меня идет проверка в 3ех мерном массиве пересечения фигур и где то при проверке 9 с 11 вылетает меседж.
C++ Среднее значение полученных чисел, количество значений в массиве, превышающих среднее http://www.cyberforum.ru/cpp-beginners/thread612778.html
Вот решаю одну задачку из книги Праты: "Напишите программу, читающую в массив double до 10 значений пожертвований. Программа должна прекращать ввод при получении нечисловой величины. Она должна выдавать среднее значение полученных чисел, а также количество значений в массиве, превышающих среднее." Что-то нахимичил очень громоздкое, но вот пока проблема на счёт получения нечисловой величины. ...
C++ Глобальные и статические глобальные переменные Скажите, чем отличаются глобальные переменные от статических глобальных переменных? подробнее

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
24.06.2012, 18:31  [ТС]     Как работает ссылка с объектами, классами и перегруженным оператором []
Цитата Сообщение от DU Посмотреть сообщение
Вот эквивалентный код:
C++
1
2
3
4
5
6
7
8
9
10
11
for(int i=0; i<s.Size()-1; i++) 
{
  Point p = s[i];
  p = Point(2*i, 2*i);
  // вот это присваивание локальной переменной.
  // То, что находится в StackArray при этом не изменяется, т.е. там точки с нулевыми координатами
  // как были, так и остались без изменения
 
  // Далее идет вывод этих точек с нулевыми координатами
  cout << s[i] <<" index of element: " << i << endl;  
}
Ссылка по внутреннему устройству не отличается от указателей. Разница лишь в синтаксисе и
правилах инициализации. Далее варианты кода с ссылкой и с указателем:

C++
1
2
3
4
5
6
7
8
9
for(int i=0; i<s.Size()-1; i++) 
{
  Point& p = s[i];
  p = Point(2*i, 2*i);
  // вот это присваивание тому, на что ссылается p (ссылается на iый элемент в стеке).
  // То, что находится в StackArray в iой позиции при этом изменяется на Point(2*i, 2*i);
 
  cout << s[i] <<" index of element: " << i << endl;  
}
Вариант, когда оператор [] возвращает указатель
C++
1
2
3
4
5
6
7
8
9
for(int i=0; i<s.Size()-1; i++) 
{
  Point* p = s[i];
  *p = Point(2*i, 2*i);
  // вот это присваивание тому, на что указывает p (указывает на iый элемент в стеке).
  // То, что находится в StackArray в iой позиции при этом изменяется на Point(2*i, 2*i);
 
  cout << *s[i] <<" index of element: " << i << endl;  
}


Очень глупый капитаночевидский вопрос я правильно понимаю что между 2м и 3м случаем разницы нет... только в синтаксисе

Добавлено через 1 час 24 минуты
Цитата Сообщение от Leeto Посмотреть сообщение
Очень глупый капитаночевидский вопрос я правильно понимаю что между 2м и 3м случаем разницы нет... только в синтаксисе
чот не компелиться последний вариант


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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <sstream>
#include <iostream>
using namespace std;
class Point
{
protected:
    double m_x;                                
    double m_y;                                
public:
    
    Point(): m_x(0), m_y(0) {};                            
    Point(double new_x, double new_y) : m_x(new_x), m_y(new_y) {};
    friend ostream& operator << (ostream& os, const Point& point)
{
    return os << point.ToString();
}
   string ToString() const
{
      std::ostringstream os; 
    os << m_x << " , " << m_y; 
    std::string double_string = os.str();
 
    return "Point(" + double_string + ")";
}
};
class ArrayStack 
{    
    private:        
        
        Point* data;       
        int top;    
  public:        
      ArrayStack() :top(10), data(new Point[10]) {} 
      ArrayStack(int m_top) : top(m_top), data(new Point[m_top]) {} 
      void Swap(ArrayStack& ar)
     {
  Point* data = data;
  int   size = top;
  data = ar.data;
  top = ar.top;
  ar.data = data;
  ar.top = size;
     }
      ArrayStack& operator=(const ArrayStack& ar)
      {
 
  if(this == &ar) {return *this;}
  ArrayStack copy(ar); 
  this->Swap(copy); 
  return *this;
    }
 
 
       int Size() 
    {
        return top+1;
    }
  Point& operator [] (int index)
  {
    if (index >= this->top)
    {
        cout << "i am hreeeee" << endl;
        return this->data[0];
    }
    return data[index];
}
};
 
int main ()
        {
    ArrayStack* s;
 
for(int i=0; i<s.Size-1; i++) 
{
  Point* p = s[i];
  *p = Point(2*i, 2*i);
  cout << " вот это присваивание тому, на что указывает p (указывает на iый элемент в стеке)." << endl;
    cout << " То, что находится в StackArray в iой позиции при этом изменяется на Point(2*i, 2*i);" << endl;
 
  cout << *s[i] <<" index of element: " << i << endl;  
}
 
return 0;
}
 
/*
int main()
{    
    ArrayStack s(5); 
        for(int i=0; i<s.Size()-1; i++) 
        {
        s[i] = Point(1*i, 1*i);
        cout << s[i] << endl;   
        }
    return 0;
}*/
 
 
/*
int main (int argc,char*argv[])
        {
    ArrayStack s;
 
for(int i=0; i<s.Size()-1; i++) 
    {
  Point p = s[i];
  p = Point(2*i, 2*i);
  cout << " вот это присваивание локальной переменной." << endl;
  cout << "  То, что находится в StackArray при этом не изменяется, т.е. там точки с нулевыми координатами " << endl;
  cout << "  как были, так и остались без изменения " << endl;
 
  // Далее идет вывод этих точек с нулевыми координатами
  cout << s[i] <<" index of element: " << i << endl;  
}
return 0;
}*/
 
/*
int main ()
        {
    ArrayStack s;
 
for(int i=0; i<s.Size()-1; i++) 
{
  Point& p = s[i];
  p = Point(2*i, 2*i);
  cout << " вот это присваивание тому, на что ссылается p (ссылается на iый элемент в стеке). " << endl;
  cout << " То, что находится в StackArray в iой позиции при этом изменяется на Point(2*i, 2*i); " << endl;
 
  cout << s[i] <<" index of element: " << i << endl;  
}
 
return 0;
}
 
*/
 
Текущее время: 17:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru