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

Ссылки на тип данных в классе - C++

Восстановить пароль Регистрация
 
 
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 11:57     Ссылки на тип данных в классе #1
ребят, подскажите, как это Создать класс содержащий ссылку на int? не понимаю ссылки...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2014, 11:57     Ссылки на тип данных в классе
Посмотрите здесь:

C++ Как вы шаблонном классе определить контейнер, тип которого совпадает с именем параметра шаблона?
C++ Как описать переменную в классе, тип которой заранее неизвестен?
C++ Работа статистических данных в классе
C++ Ссылки в классе. Отследить изменения переменной
C++ Возвращаемый тип конструктора копирования в абстрактном классе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 12:27     Ссылки на тип данных в классе #2
Как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
class MyClass
{
  private:
            int & var1;
            int & var2;
  public:
            void myFunc(int & variable1, int & variable2)
           { 
             var1 = variable1;
             var2 = variable2;
           }
};
А зачем это ?
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 12:29  [ТС]     Ссылки на тип данных в классе #3
Цитата Сообщение от egor2116 Посмотреть сообщение
Как то так
а в конструкторе потом как объявить эти ссылки? это важно
и тем более если надо сделать ссылку на int vector[100] например
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 12:40     Ссылки на тип данных в классе #4
а в конструкторе потом как объявить эти ссылки? это важно
и тем более если надо сделать ссылку на int vector[100] например
Лучше напишите все задание, а то вырванная из контекста строка может быть не правильно истолкована.
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 12:44  [ТС]     Ссылки на тип данных в классе #5
Цитата Сообщение от egor2116 Посмотреть сообщение
Лучше напишите все задание
Создать класс вектор, содержащий ссылку на int, размерность вектора и переменную ошибки. Класс имеет конструкторы по умолчанию, конструктор с одним и двумя параметрами, конструктор копирования и деструктор
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 12:46     Ссылки на тип данных в классе #6
содержащий ссылку на int
Я думаю в данном случае это просто переменная.
Минуту, набросаю вам примерный интерфейс.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
08.01.2014, 12:46     Ссылки на тип данных в классе #7
Цитата Сообщение от Serega_094 Посмотреть сообщение
Создать класс вектор, содержащий ссылку на int, размерность вектора и переменную ошибки
В данном случае все-таки не ссылку, а указатель.
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 12:54  [ТС]     Ссылки на тип данных в классе #8
Цитата Сообщение от egor2116 Посмотреть сообщение
Я думаю в данном случае это просто переменная.
Минуту, набросаю вам примерный интерфейс.
буду очень признателен

Добавлено через 27 секунд
Цитата Сообщение от 0x10 Посмотреть сообщение
В данном случае все-таки не ссылку, а указатель.
все равно темный лес для меня

Добавлено через 2 минуты
да и задание в два раза больше, но мне бы вначале с указателем разобраться этим...
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 12:55     Ссылки на тип данных в классе #9
Как то так, остальные методы типа поиска, сортировки по вкусу.
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
class Vector
{
  private:
          int * array;
          unsigned int size;
          int error;
  public:
         Vector(unsigned int _size = 5) : size(_size)
         {
           array = new int[size];
           error = 0;
         }
         
         Vector(const Vector & vec)
         {
           size = vec.getSize();
           array = new int[size];
           error = vec.getError();
         }
         
         ~Vector()
         {
           delete [] array;
           array = NULL;
         }
         
         unsigned int getSize()const;
         int getError()const;
         void push_back(int var);
         int & operator[] (int idx);       
};
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 13:08  [ТС]     Ссылки на тип данных в классе #10
спасибо))

Добавлено через 8 минут
Цитата Сообщение от egor2116 Посмотреть сообщение
Лучше напишите все задание
все задание вообще выглядит вот так:
Создать класс вектор, содержащий ссылку на int, размерность вектора и переменную ошибки. Класс имеет конструкторы по умолчанию, конструктор с одним и двумя параметрами, конструктор копирования и деструктор. Определить оператор +, - , * , - как дружественные функции, =, +=, -=, *=,[] - как функции-члены. Определить операторы =, +, - , *, +=, -=, *= с целым числом операторы ++ и --. Определить функцию печати. Сравнить время работы созданного класса и встроенного массива типа int. Перегрузить операторы вывода и ввода в поток
ужас для меня
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 13:13     Ссылки на тип данных в классе #11
ужас для меня
))
так а что не получается ?
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 13:15  [ТС]     Ссылки на тип данных в классе #12
Цитата Сообщение от egor2116 Посмотреть сообщение
так а что не получается ?
щас кину то, что я сделал, запутался полностью

Добавлено через 43 секунды
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale.h>
#include <ctime>
#include <cstdlib>
using namespace std;
 
class Vector {
private: 
    int *V, size;
    bool error;
public:
    Vector();  // конструктор
    Vector(int); // конструктор с параметрами
    Vector(const Vector &vc); // констуктор копирования
    ~Vector(); // деструктор 
    void show(); // функция печати
    friend int Vector::operator +(const Vector *); // дружественная +
    friend int Vector::operator -(const Vector *); // дружественная -
    friend int Vector::operator *(const Vector *); // дружественная *
    /*Vector::operator =(){ // функция-член = ; поиск ошибкки
    }
    Vector::operator +=() { // функция-член += ; добвление элемента в вектор 
    }
    Vector::operator -=() { // функция-член -= ; удаление заданного элемента из вектора
    }
    Vector::operator *=() { // функция-член *= ; умножение векторов
    }
    Vector::operator []() { // функция-член [] ; вывод заданного элемента на экран
    }*/
};
    Vector::Vector () { // конструктор
        cout<<"Вызов конструктора"<<endl;
        this->V=vector[100];
        this->size=0;
        //this->error= false;
    }
    Vector::Vector(int size) { // констурктор с параметрами
        cout<<"Введите размер вектора:"<<endl;
        cout<<"Размер: ";
        cin>>size;
        Vector::size=size;
    }
    Vector::Vector(const Vector &) { // конструктор копирования
        this-> V[100]=vc.V[100];
        this->size=vc.size;
        //this->error=vc.error;
    }
    Vector::~Vector(){ // деструктор 
        cout<<"Объект "<< V << "разрушен"<<endl;
        _getch();
    }
    void Vector::show (){
        cout<<"В векторе содержится:"<<endl;
        for (int i=0; i<size; i++)
        {cout<<V[i]<<endl;} 
        //cout<<error;
    }
     Vector::operator +(int a){ // сложение элементов вектора с числом
        cout<<"Вектор после сложения"<<endl;
        for (int i=0; i<size; i++)
        {V[i]=V[i]+a;
        cout<<V[i]<<endl;
        }
    }
    Vector::operator -(int a){ //вычитание числа из элементов вектора
        cout<<"Вектор после вычитания "<<endl;
        for (int i=0; i<size; i++)
        {V[i]=V[i]-a;
        cout<<V[i]<<endl;
        }
    }
    Vector::operator *(int a){ // умножение вектора на число
        cout<<"Вектор после умножения"<<endl;
        for (int i=0; i<size; i++)
        {V[i]=V[i]*a;
        cout<<V[i]<<endl;
        }
    }
    void main(){
    setlocale(0,"russian");
    srand(time(NULL));
    for (int j=0; j<Vector::size; j++)
        {vector[j]=rand()%100+1;}
        int a;
    cout<<"Введите число а "<<endl;
    cin>>a;
    _getch();
    }
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 14:01     Ссылки на тип данных в классе #13
сейчас посмотрю(ходил обедать)
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 14:06  [ТС]     Ссылки на тип данных в классе #14
Цитата Сообщение от egor2116 Посмотреть сообщение
ходил обедать
приятного пищеварения
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 15:05     Ссылки на тип данных в классе #15
Как то так
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#include <iostream>
#include <fstream>
 
/*Îïðåäåëèòü îïåðГ*òîð +, - , * , - ГЄГ*ГЄ äðóæåñòâåГ*Г*ûå ГґГіГ*êöèè, =, +=, -=, *=,[] - ГЄГ*ГЄ ГґГіГ*êöèè-÷ëåГ*Г».
Îïðåäåëèòü îïåðГ*òîðû =, +, - , *, +=, -=, *= Г± öåëûì ÷èñëîì îïåðГ*òîðû ++ ГЁ --. Îïðåäåëèòü ГґГіГ*êöèþ ГЇГҐГ·Г*ГІГЁ.
 Г‘Г°Г*ГўГ*ГЁГІГј âðåìÿ Г°Г*áîòû ñîçäГ*Г*Г*îãî ГЄГ«Г*Г±Г±Г* ГЁ âñòðîåГ*Г*îãî Г¬Г*Г±Г±ГЁГўГ* ГІГЁГЇГ* int.
  Ïåðåãðóçèòü îïåðГ*òîðû âûâîäГ* ГЁ ââîäГ* Гў ïîòîê*/
 
class Vector
{
  private:
          int * array;
          int error;
          unsigned int addSize;
          unsigned int size;
          unsigned int index;
  public:
         Vector(unsigned int _size = 5) : size(_size)
         {
           array = new int[size];
           error = 0;
           index = 0;
           addSize = 5;
         }
         
         Vector(const Vector & vec)
         {
           size = vec.getSize();
           array = new int[size];
           error = vec.getError();
           for(int i = 0; i < size; ++i)
           {
             array[i] = vec.getArray()[i];
             index = i;
           }
           addSize = 5;
         }
         
         ~Vector()
         {
           delete [] array;
           array = NULL;
         }
         
         unsigned int getSize()const{ return size; }
         int getError()const{ return error; }
         unsigned int getIndex()const{ return index; }
         int * getArray()const{ return array; }
         
         void push_back(int var)
         {
           if(index + 1 < size)
             array[++index] = var;
           else
           {
             int * arr = new int[size + addSize];
             for(int i = 0; i < size; ++i)
              arr[i] = array[i];
             arr[++index] = var;
           }   
         }
         
         /* äðóæåñòâåГ*Г*ûå */
         friend const Vector & operator+ (Vector & vec1, int & var)
         {
           for(int i = 0; i < vec1.getIndex(); ++i)
             vec1[i] += var;
              return vec1;
         }
         
         friend Vector operator- (Vector & vec1, int & var)
         {
           for(int i = 0; i < vec1.getIndex(); ++i)
             vec1[i] -= var;
              return vec1;
         }
         
         friend Vector operator* (Vector & vec1, int & var)
         {
            for(int i = 0; i < vec1.getIndex(); ++i)
             vec1[i] *= var;
              return vec1;    
         }
         
         friend std::ostream & operator<< (std::ostream & out, Vector vec)
         {
           for(int i = 0; i < vec.getIndex(); ++i)
             out << vec[i] << " ";
           out << std::endl;
           return out;
         }
         
          friend std::istream & operator>> (std::istream & in, Vector vec)
         {
           for(int i = 0; i < vec.getIndex(); ++i)
             in >> vec[i];
           return in;
         }
         
         /* ГґГіГ*êöèÿ-÷ëåГ* */
         int & operator[] (int idx){ return array[idx]; } 
         
         Vector & operator+= (int var)
         { 
             for(int i = 0; i < index; ++i)
                array[i] += var;
             return *this;
         }
         
         Vector & operator-= (int var)
         { 
             for(int i = 0; i < index; ++i)
                array[i] -= var;
             return *this;
         }
         
         Vector & operator*= (int var)
         { 
             for(int i = 0; i < index; ++i)
                array[i] *= var;
             return *this;
         }
         
         Vector & operator++ ()
         { 
             for(int i = 0; i < index; ++i)
                ++array[i];
             return *this;
         }
         
         Vector & operator++ (int)
         { 
             for(int i = 0; i < index; ++i)
                array[i]++;
             return *this;
         }
         
         Vector & operator-- ()
         { 
             for(int i = 0; i < index; ++i)
                --array[i];
             return *this;
         }
         
         Vector & operator-- (int)
         { 
             for(int i = 0; i < index; ++i)
                array[i]--;
             return *this;
         }
         
         Vector & operator= (const int & var)
         { 
             for(int i = 0; i < index; ++i)
                array[i] = var;
             return *this;
         }
         
          Vector & operator= (Vector & vec)
         { 
                delete [] array;
                size = vec.getSize();
                array = new int[size];
                index = vec.getIndex();
                error = vec.getError();
                for(int i = 0; i < index; ++i)
                  array[i] = vec[i];
             return *this;
         }       
};
 
int main()
{   
 const size_t SIZE = 10;
 Vector vec1(SIZE), vec2;
 
 for(int i = 0; i < SIZE; ++i)
     vec1[i] = i;
     
 std::cout << vec1;
 
    
  system("PAUSE");
  return 0;
}
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 15:16  [ТС]     Ссылки на тип данных в классе #16
Спасибо тебе огромное ты меня спас у преподавателя спрашивал как делать..сама не знает, а такие задает еще раз спасибо
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
08.01.2014, 15:26     Ссылки на тип данных в классе #17
Только хочу предупредить возможны, ошибки, не компилировал, проверь все перед тем как сдавать.
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 15:39  [ТС]     Ссылки на тип данных в классе #18
Цитата Сообщение от egor2116 Посмотреть сообщение
Только хочу предупредить возможны, ошибки, не компилировал, проверь все перед тем как сдавать.
я проверил откомпиллировал, кое-что добавил все работает
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.01.2014, 15:43     Ссылки на тип данных в классе #19
egor2116, немного критики в образовательных целях
Цитата Сообщение от egor2116 Посмотреть сообщение
for(int i = 0; i < size; ++i)
сравнение знакового и беззнакового
Цитата Сообщение от egor2116 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
void push_back(int var)
* * * * *{
* * * * * *...
* * * * * *else
* * * * * *{
* * * * * * *int * arr = new int[size + addSize];
* * * * * * *for(int i = 0; i < size; ++i)
* * * * * * * arr[i] = array[i];
* * * * * * *arr[++index] = var;
* * * * * *} * 
* * * * *}
новый массив создали, а со старым чё?
Цитата Сообщение от egor2116 Посмотреть сообщение
C++
1
2
3
4
5
6
friend const Vector & operator+ (Vector & vec1, int & var)
* * * * *{
* * * * * *for(int i = 0; i < vec1.getIndex(); ++i)
* * * * * * *vec1[i] += var;
* * * * * * * return vec1;
* * * * *}
почему оператор + работает как += ? почему инт по ссылке?
Цитата Сообщение от egor2116 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
Vector & operator= (Vector & vec)
* * * * *{ 
* * * * * * * * delete [] array;
* * * * * * * * size = vec.getSize();
* * * * * * * * array = new int[size];
* * * * * * * * index = vec.getIndex();
* * * * * * * * error = vec.getError();
* * * * * * * * for(int i = 0; i < index; ++i)
* * * * * * * * * array[i] = vec[i];
* * * * * * *return *this;
* * * * *}
нет проверки на присваивание самому себе. почему vec ссылка, а не ссылка на константу?
ну глобальная проблема по всему коду: что если new бросит исключение?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 15:51     Ссылки на тип данных в классе
Еще ссылки по теме:

C++ Переменная, содержащая тип, в шаблонном классе
C++ Как описать шаблонную переменную в классе, тип которой заранее неизвестен ?
C++ Константные ссылки на неправильные тип данных

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

Или воспользуйтесь поиском по форуму:
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
08.01.2014, 15:51  [ТС]     Ссылки на тип данных в классе #20
Цитата Сообщение от Jupiter Посмотреть сообщение
ну глобальная проблема по всему коду:
а как правильнее будет?
Yandex
Объявления
08.01.2014, 15:51     Ссылки на тип данных в классе
Ответ Создать тему
Опции темы

Текущее время: 23:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru