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

перегрузка [] - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Размер объекта? http://www.cyberforum.ru/cpp-beginners/thread776829.html
При работе с объектами, совсем не знал забыл следующие моменты: Зависит ли размер объекта от количества в нем методов ? Будет ли метод скомпилирован в исполняемый файл или dll, если не используется в коде ? Статический метод единожды увеличивает размер класса (или объекта ?) Функция не инлайниться в Release версии вижлы, с чем это может быть связанно?
C++ Ошибка с классами Здравствуйте, не могли бы вы мне помочь, дороги форумчане, ошибка связанная с динамикой здесь у меня. #include "stdafx.h" typedef enum{con,exp,log,pow,sin,cos,tan,cot,sec,csc,sinh,cosh,tanh,coth,sech,csch} simpleElementaryFunctions; typedef enum{add,sub,mul,div,lbr,rbr,nos} sign; class ElementaryFunctions { simpleElementaryFunctions Element; ElementaryFunctions *Argument; sign... http://www.cyberforum.ru/cpp-beginners/thread776820.html
C++ Не пойму почему не компилирует
Начал читать "Как програмировать на С++" Дейтелов Дошёл до главы "Введение в классы и объекты", Отделение интерфейса от реализации, переписал код в свой компилятор но выдает ошибку " undefined reference to `GradeBook::GradeBook(std::string)' " " undefined reference to `GradeBook::getCourseName()' " Dev C++ Portable. Вот код: //Определения элемент-функций GradeBook. Файл содержит //...
Вроде-бы все просто, но путаюсь с константыми методами C++
В чем разница где поставить модификатор const const void Metod(); void Method()const; В каком случаем использовать один из их? Заранее спасибо.
C++ Как написать фреймы? http://www.cyberforum.ru/cpp-beginners/thread776759.html
Я хочу попробовать написать программу, чтобы она не просто была консольной, а имела фреймы. Можете подсказать, как их писать или киньте ссылочку, где об этом что-то написано. Добавлено через 3 минуты Работаю на VS 2012.
C++ автомат по размену монет задание звучит так : "Автомат размена монет. Реализовать три функции при помощи классов" т.к. на С++ последний раз я работал полтора года назад, то меня это задание поставило в затруднительное положение. если у кого есть какие идеи или может кто дать ссылку на более-менее подходящий исходник, буду очень благодарен подробнее

Показать сообщение отдельно
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
04.02.2013, 15:37  [ТС]     перегрузка []
В С + + не контролируется выход за границы массива, вот я и решил написать программу с динамическим массивом чтобы можно было контролировать это, например:
создали мы массив размером 5 и заполнили его числами, и я хочу, чтобы моя программа не допускала такого
arr [6] = 3;
чтобы на этом моменте вибиволо сообщения или выходило из программы.
Вот я и подумал написать две версии [] обна для модификации массива, а вторая, константная версия, только для чтения этого массива. Если не будет две версии, у меня получится фикссований массив, который после инициализации не сможет менять свой ​​размер. Я подумал написать что-то похоже к этому, но размер массива затем изменить нельзя.
C++
1
2
3
4
5
6
7
8
template<typename T>
T &Array<T>::operator[](int x)
{
    //if(x<0 && x>=size) exit(1);                        
    if(x>=mSize)
        add_new_elem(x+1);
    return (mElem[x]);
}
Добавлено через 35 минут
Решил сделать по другому, добавить функцию push_back чтобы добавлять элементы а в operator[] генерировать исключения, но почему я это исключение перехватить не могу?
Кликните здесь для просмотра всего текста
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
#ifndef array_h
#define array_h
 
 
template<typename T>
class Array {
public:
    Array();
    Array(int);
    ~Array();
    T &operator[](int) const;
    bool operator==(const Array<T>&);
    bool operator!=(const Array<T>&);
    void push_back(T);
    int size() const;
protected:
    void add_new_elem(int);
    T* mElem;
    int mSize;
};
 
template<typename T>
void Array<T>::push_back(T X)
{
    add_new_elem(mSize+1);
    mElem[mSize-1] = X;
}
 
template<typename T>
bool Array<T>::operator!=(const Array<T>& obj)
{
    if(mSize!=obj.mSize){
        return true;}
 
        for(int i=0;i<mSize;i++)
            if(mElem[i] != obj.mElem[i]) return true;
     return false;
}
 
template<typename T>
bool Array<T>::operator==(const Array<T>& obj)
{
    if(mSize!=obj.mSize){
        return false;}
 
        for(int i=0;i<mSize;i++)
            if(mElem[i] != obj.mElem[i]) return false;
     return true;
}
 
template<typename T>
int Array<T>::size() const
{
    return (mSize);
}
 
template<typename T>
Array<T>::Array()
{
    mSize = 1;
    mElem = new T[mSize];
}
 
template<typename T>
Array<T>::Array(int size)
{
    mSize = size;
    mElem = new T[mSize];
}
 
template<typename T>
Array<T>::~Array()
{
    delete [] mElem;
}
 
template<typename T>
void Array<T>::add_new_elem(int newSize)
{
    T* newElem = new T[newSize];
 
    for(int i=0;i<newSize;i++)
        newElem[i] = mElem[i];
 
    mSize = newSize;
    delete [] mElem;
    mElem = newElem;
}
 
template<typename T>
T &Array<T>::operator[](int x) const
{
    if(x >= mSize || x < 0){ 
        string e = "Error";
        throw invalid_argument(e);}
    return (mElem[x]);
}
 
 
#endif

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "array.h"
 
using namespace std;
 
int main()
{
    Array<int> arr,arr2;
    for(int i=0;i<8;i++){
        arr[i]=i+1;
    }
    cout<<endl<<arr.size()<<endl<<endl;
    for(int i=0;i<arr.size();i++)
        cout<<arr[i]<<" ";
    cout<<endl;
    try{
    arr[9] = 5;
    }
    catch(...)
    {cout<<"adw";
    }
    cout<<endl;
    system("pause>0");
    return 0;
}
 
Текущее время: 15:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru