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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
madonzy
0 / 0 / 0
Регистрация: 05.10.2013
Сообщений: 65
#1

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

24.04.2014, 15:34. Просмотров 249. Ответов 1
Метки нет (Все метки)

Здраствуйте. Написал небольшой код, всё работает, но не знаю как при динамическом вызове можно было просто использовать a[1], a[2]... вместо (*a)[1], (*a)[2] ....
Вот сам код:

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
#include <iostream>
#include <cstdlib>
 
using std::cin;
using std::cout;
using std::endl;
 
class Vector {
 
    private:
        const size_t size;
        float *p;
 
    public:
        Vector(const size_t n) : size(n), p(new float [size]) {}
        ~Vector() { if(p) delete []p; };
        friend std::istream & operator >> (std::istream &, Vector *&);
        friend std::ostream & operator << (std::ostream &, const Vector *);
 
        friend std::istream & operator >> (std::istream &, Vector &);
        friend std::ostream & operator << (std::ostream &, const Vector &);
        float & operator [] (const size_t i) const { return p[i]; }
};
 
// Dynamic allocation
std::istream & operator >> (std::istream &lh, Vector *&rh) {
    for (int i = 0; i < rh->size; ++i)
        cout << "Enter value of box #" << i+1 << " ", lh >> rh->p[i];
    return lh;
}
 
std::ostream & operator << (std::ostream &lh, const Vector *rh) {
    for (int i = 0; i < rh->size; ++i)
        cout << "Value of box #" << i+1 << " is " << rh->p[i] << endl;
    return lh;
}
 
 
// Static allocation
std::istream & operator >> (std::istream &lh, Vector &rh) {
    for (int i = 0; i < rh.size; ++i)
        cout << "Enter value of box #" << i+1 << " ", lh >> rh.p[i];
    return lh;
}
 
std::ostream & operator << (std::ostream &lh, const Vector &rh) {
    for (int i = 0; i < rh.size; ++i)
        cout << "Value of box #" << i+1 << " is " << rh.p[i] << endl;
    return lh;
}
 
int main() {
 
    // Start dynamic
    Vector *a = new Vector(3);
 
    cout << "Dynamic:" << endl;
    cin >> a;
    cout << a;
 
    cout << "Enter new value for (*a)[0]: ";
    cin >> (*a)[0];
    cout << "New value of (*a)[0] = " << (*a)[0] << endl;
 
    delete a;
    // End dynamic
 
    // --------------------------------------
 
    // Start static
    Vector b(3);
 
    cout << endl << "Static:" << endl;
    cin >> b;
    cout << b;
 
    cout << "Enter new value for b[0]: ";
    cin >> b[0];
    cout << "New value of b[0] = " << b[0] << endl;
    // End static
    
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2014, 15:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка скобок для указателя (C++):

Перегрузка оператора сравнения для указателя на объект - C++
Имеется класс такого плана: template &lt;class T&gt; class Node{ private: T data; //other stuff }; Внутри класса перегружены...

Перегрузка квадртных скобок [] - C++
Мое почтение, уважаемые форумчане! :) Столкнулся с неразрешимой проблемой в ходе написания шаблонного массива-контейнера. Перегружаю...

Перегрузка круглых скобок как ravalue - C++
Не могу понять, как перегрузить () для того чтобы можно было использовать a(1, 2)=2; вместо a=3; ошибся, наверное не rvalue, а...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

Как сделать функцию от указателя на класс и указателя на метод? - C++
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
24.04.2014, 17:09 #2
Цитата Сообщение от madonzy Посмотреть сообщение
но не знаю как при динамическом вызове можно было просто использовать
скорее всего никак , порядок вызова такой, что приходится писать разыменовывание указателя в скобках

Добавлено через 40 минут

Не по теме:

a->operator[](0);
или как то так

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 17:09
Привет! Вот еще темы с ответами:

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using namespace...

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Почему при выводе указателя получаем для char - значение по адресу, а для других типов - адрес - C++
Есть следующий код. Результат работы этой программы представлен на рисунке. Почему при выводе указателя для char возвращается значение, а...

Vector для указателя - C++
//Form.h ... class Button { public: ...//данные конструктор и методы }; class Group { public:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru