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

Возможно ли для класса сделать оператор "[][]"? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как проверить нажатие "Enter" http://www.cyberforum.ru/cpp-beginners/thread1099622.html
Пользователь вводит поочередно значения какие то, хочу что бы при нажатии "Enter" цикл вырубался и программа работала дальше. Получить VK_RETURN через windows.h не получится, тк пишу на xcode(mac). как подключить библиотеку не нашел, да и думаю есть способы полегче. getchar не получается, тк пользователь может ввести ansii значение этого символа цифрами и программа остановится(как я понимаю)....
C++ Страуструп - принципы и практика программирования. Ошибки компиляции При компиляции примеров из книги, 12 главы (графика), получаю ошибки: Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "protected: void __thiscall Fl_Image::draw_empty(int,int)" (?draw_empty@Fl_Image@@IAEXHH@Z) в функции "public: virtual void __thiscall Graph_lib::Bad_image::draw(int,int,int,int,int,int)"... http://www.cyberforum.ru/cpp-beginners/thread1099620.html
C++ Знакомство с указателями. Синтаксическая ошибка.
Доброго дня! В качестве учебного пособия использую "С++ для чайников" Тема: первое знакомство с указателями С++, ст.89 //Layout - эта программа призвана дать читателю представление о расположении переменных в памяти #include<stdio.h> #include<iostream> using namespace std; int main(int arc, char*pszArgs)
Задать случайно массив, выводить является ли сумма делимой на 2 без остатка C++
помогите решить задачи в с++ 1) задать случайно массив от -20 до 50 с шагом 0.5, выводить является ли сумма делимой на 2 без остатка. 2)создать функцию, в качестве параметра получает массив и количество его элементов, возвращает массив, упорядоченный по возрастанию.
C++ Циклический сдвиг элементов квадратной матрицы http://www.cyberforum.ru/cpp-beginners/thread1099602.html
Осуществить циклический сдвиг элементов квадратной матрицы размерности MхN вправо на k элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него в последнюю строку справа налево, из нее в первый столбец снизу вверх, из него в первую строку. для остальных элементов аналогично.
C++ Программа вроде компилируется,но значения не выводит Помогите пожалуйста!!Очень срочно.Программа вроде компилируется,но значения не выводит.В чем проблема? // 11.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <math.h> #include "matrix.h" #include <fstream> подробнее

Показать сообщение отдельно
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,316
18.02.2014, 16:55     Возможно ли для класса сделать оператор "[][]"?
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
#ifndef __MATRIX_H__
#define __MATRIX_H__
 
#include <stdexcept>
#include <cassert>
 
template <class T>
class Matrix
{
    T*           data;
    unsigned int rows;
    unsigned int cols;
 
    T* new_copy(const T* src, size_t src_size, size_t dst_size)
    {
        assert(dst_size >= src_size);
        T* dest = new T[dst_size];
        try
        {
            std::copy(src, src + src_size, dest);
        }
        catch(...)
        {
            delete[] dest;
            throw;
        }
        return dest;
    }
 
public:
    Matrix(unsigned int _rows, unsigned int _cols):
        rows(_rows),
        cols(_cols)
    {
        assert(rows > 0);
        assert(cols > 0);
        if (rows == 0 || cols == 0)
            throw std::invalid_argument("Invalid argument in Matrix ctor");
 
        data = new T[rows * cols];
    }
 
    ~Matrix()
    {
        delete[] data;
    }
 
    Matrix(const Matrix& m):
        data(new_copy(m.data, m.rows * m.cols, m.rows * m.cols)),
        rows(m.rows),
        cols(m.cols)
    {
    }
 
    Matrix& operator=(const Matrix& m)
    {
        if (this != &m)
        {
            T* temp = new_copy(m.data, m.rows * m.cols, m.rows * m.cols);
            delete[] data;
            data = temp;
            rows = m.rows;
            cols = m.cols;
        }
        return *this;
    }
 
    // это позволит обращаться к матрице: m[i][k] = ...;
    template<class U>
    class Helper
    {
        template<typename U> class Matrix;
 
        Matrix<U>&   matrix;
        unsigned int i;
 
        Helper(Matrix<U>& _mc, unsigned int _i): matrix(_mc), i(_i) {};
        Helper(const Matrix<U>& _mc, unsigned int _i): matrix(const_cast<Matrix&>(_mc)), i(_i) {};
        Helper(const Helper&);
        Helper& operator=(const Helper&);
 
        friend class Matrix<U>;
 
    public:
        U& operator[](unsigned int k) const
        {
            assert(i < matrix.rows);
            assert(k < matrix.cols);
            if (i >= matrix.rows || k >= matrix.cols)
                throw std::range_error("Range error in Matrix::Helper::operator[]() const");
 
            return matrix.data[matrix.cols * i + k];
        }
 
        U& operator[](unsigned int k)
        {
            assert(i < matrix.rows);
            assert(k < matrix.cols);
            if (i >= matrix.rows || k >= matrix.cols)
                throw std::range_error("Range error in Matrix::Helper::operator[]()");
 
            return matrix.data[matrix.cols * i + k];
        }
    };
 
    Helper<T> operator[](unsigned int i) const
    {
        assert(i < rows);
        if (i >= rows)
            throw std::range_error("Range error in Matrix::operator[]() const");
 
        return Helper<T>(*this, i);
    }
 
    Helper<T> operator[](unsigned int i)
    {
        assert(i < rows);
        if (i >= rows)
            throw std::range_error("Range error in Matrix::operator[]()");
 
        return Helper<T>(*this, i);
    }
 
    // ... прочие детали интерфейса и реализации....
};
 
#endif //__MATRIX_H__
 
Текущее время: 08:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru