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

указатели - C++

Восстановить пароль Регистрация
 
 
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
10.10.2013, 23:52     указатели #1
Доброго времени суток.
Я начал изучать указатели и ссылки. Кто какие задания может посоветовать для практики?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2013, 23:52     указатели
Посмотрите здесь:

Указатели.... C++
C++ Указатели
Указатели C++
C++ Указатели
C++ Указатели
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
11.10.2013, 01:36     указатели #2
Реализуйте умные указатели.
Что должно быть. Должен быть шаблонный класс:
C++
1
2
3
4
5
6
7
8
9
10
11
template <class T> class Pointer {
public:
    Pointer < T > ( T& object );
    Pointer < T > ( Pointer < T > & pointer );
    ~Pointer < T > ();
    T& operator -> ();
    Pointer < T > operator = ( Pointer < T > p );
private:
    unsigned m_count;
    T* m_object;
}
То есть, требуется уметь создавать новый умный указатель, уметь его присваивать другому указателю. Также, требуется вести подсчёт количества ссылок и вызвать, когда требуется, деструкторы.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
11.10.2013, 01:51     указатели #3
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 01:53     указатели #4
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Pointer < T > operator = ( Pointer < T > p );
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
11.10.2013, 01:57     указатели #5
Цитата Сообщение от Jupiter Посмотреть сообщение
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
А такая?
C++
1
Pointer < T > operator = ( Pointer < T > &p );
Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
11.10.2013, 02:04     указатели #6
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
рассуждать о плюсах и минусов шаблонов хорошо в соседней теме. templates, STL
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
А тут IchimaruGin только начал изучать Си. И бесполезно валить всё в одну кучу: шаблоны, классы, указатели. Изучать эти вещи надо как раз в обратной последовательности.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
11.10.2013, 02:11     указатели #7
IchimaruGin,
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе. Затем переделать на ссылки.
Создать функции, которые принимают массив и его размер и:
- рандомно заполняют его
- выводят на экран
- перемешивают элементы (для того, чтобы менять два числа местами создать отдельную функцию)
Все проделывать сначала на указателях, потом на ссылках.

Посложнее:
реализовать однонаправленный список (тут надо было бы уже знать, что такое структуры)
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
11.10.2013, 02:20     указатели #8
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
ты о чём-то своём начал говорить. Какие-то шаблоны... тема про указатели!
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Кто какие задания может посоветовать для практики?
Вот ИМХО довольносамые и спискам, как предложил Глюк.
- Задать в программе несколько локальных переменных, глобальных, функций, у функций аргументы. Вывести на экран адреса всех этих переменных и функций.
-передача указателей как аргументов в функцию. Отличия от передачи аргументов по значению. Написать функцию обмена значений двух переменных void swap(int* a, int* b)
- Задать переменную и несколько указателей. Сделать, чтобы оба указателя указывали на эту переменную. Изменять значение переменной, обращаясь к ней то напрямую, то через указатель. Убедиться, что переменная изменяется при косвенном обращении к ней.

- Изменять указатель, перенаправляя его на разные переменные. Задать разные значения нескольким переменным, обращаясь к ним через один указатель.
Массивы и указатели.
- пройтись по массиву с помощью указателя и вывести содержимое на экран
-Создать программу "оглавление книги". В массив char book[] заносится текст. Создать оглавление книги в виде массива char* chapters[N]
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
11.10.2013, 16:31  [ТС]     указатели #9
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Просто что бы уточнить:
нужна функция
C++
1
int p1(int* pa,int s)
pa -указатель, который принимает два числа s - сума
или
C++
1
int p1(int* pa,int* pb,int s)
pa -указатель, который принимает первое число pb -указатель, который принимает второе число s - сума
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
11.10.2013, 16:35     указатели #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А тут IchimaruGin только начал изучать Си. И бесполезно валить всё в одну кучу: шаблоны, классы, указатели. Изучать эти вещи надо как раз в обратной последовательности.
Комплексное изучение - наиболее эффективное изучение. Сложно, но если есть желание, то эффективность много выше. Это так, моя личная заметка.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
Премного извеняюсь. Действительно перескачило.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
11.10.2013, 16:51     указатели #11
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Просто что бы уточнить:
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Нужна такая функция:
C++
1
2
3
4
void foo(int *x, int *y)
{
    ...
}
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
11.10.2013, 17:30  [ТС]     указатели #12
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
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
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;
int b;
int s;
int* pa;
 
int p1(int* pa)
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;
    pa = &a;
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;
    
    s = a + b;
    return s;
}
 
int main()
{
    int c;
    c = p1(pa);
    cout << "Suma =" << c << endl;
    return 0;
}
Добавлено через 41 секунду
шяс перепишу

Добавлено через 32 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Вот что получилось
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
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;                                          // Первое число
int b;                                          // Второе число
int c;                                          // Доп. число
int* pa(nullptr);                               // Пустой указатель
int* pb(nullptr);                               // Пустой указатель
 
void p1(int* pa,int* pb)
{
    pa = &a;                                    // Присвоение указателю pa адрес а
    pb = &b;                                    // Присвоение указателю pb адрес b
    cout << " Suma = " << (*pa + *pb) << endl;  // Подсчет и вывод сумы чисел
}
 
int main()
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   // Ввод первого числа
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                   // Ввод второго числа
    p1(pa, pb);
    cin >> c;                                   // Задержка экрана
    return 0;
}
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:36     указатели #13
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Вот что получилось
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
11.10.2013, 17:39  [ТС]     указатели #14
Цитата Сообщение от Jupiter Посмотреть сообщение
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
а зачем?

Добавлено через 1 минуту
задача стояла что бы два числа функция читала!(вроде как)
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:40     указатели #15
Цитата Сообщение от IchimaruGin Посмотреть сообщение
а зачем?
а для чего параметры у функции p1 ?

Цитата Сообщение от IchimaruGin Посмотреть сообщение
задача стояла что бы два числа функция читала!(вроде как)
иди ещё раз почитай для чего нужны функции, как бы грубо это не звучало но в духе "а зачем?"
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
11.10.2013, 17:43  [ТС]     указатели #16
что бы функция работала)

Добавлено через 1 минуту
ок еще подучу
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:44     указатели #17
Цитата Сообщение от IchimaruGin Посмотреть сообщение
что бы функция работала)
зачем? чтобы получить тот же результат можно было все и в main-е написать
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
11.10.2013, 18:14  [ТС]     указатели #18
Цитата Сообщение от Jupiter Посмотреть сообщение
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
вообщето a,b и c,d это переменные а функцию можно и так использовать с другими числами...
если я не правильно понял обьясни в чем я не прав.

Добавлено через 2 минуты
не могу просто понять как можна сохранять эти данные в других переменных зарание неизвестных

Добавлено через 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
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;                                          // Первое число
int b;                                          // Второе число
int c;                                          // Доп. число
int* pa(nullptr);                               // Пустой указатель
int* pb(nullptr);                               // Пустой указатель
 
void p1(int* pa,int* pb)
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   // Ввод первого числа
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                   // Ввод второго числа
    pa = &a;
    pb = &b;
    cout << " Suma = " << (*pa + *pb) << endl;  // Подсчет и вывод сумы чисел
}
 
int main()
{
    p1(pa, pb);
    cin >> c;                                   // Задержка экрана
    return 0;
}
если что я такой вариант написал
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 18:18     указатели #19
Цитата Сообщение от IchimaruGin Посмотреть сообщение
вообщето a,b и c,d это переменные а функцию можно и так использовать с другими числами...
ок да, тут я неточно выразился, но суть от этого не меняется, a,b жестко захардкожены внутри функции в которую ещё и передаются указатели, но используются они не поназначению.
читаем условие ещё раз
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
1. у нас есть два числа
2. мы вызываем функцию, и передаем в эту функция эти два числа
3. после вызова функции мы ожидаем что первое число будет содержать сумму обоих чисел.
-про вывод результата внутри функции ничего в задании не сказано.
-про привязку к переменным а b тоже ничего не сказано.
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>
 
using std::cin;
using std::cout;
using std::endl;
 
void p1(int* pa, int* pb)
{
    *pa += *pb;
}
 
int main()
{
    int a, b;
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                  
    
    p1(&a, &b);
    cout << a;
 
    cin >> a;                                   
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 18:23     указатели
Еще ссылки по теме:

C++ Указатели
C++ Указатели, такие указатели
Указатели.Строки и указатели C++

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

Или воспользуйтесь поиском по форуму:
IchimaruGin
60 / 60 / 23
Регистрация: 14.07.2013
Сообщений: 284
Завершенные тесты: 1
11.10.2013, 18:23  [ТС]     указатели #20
значит я не так понял задание...
Yandex
Объявления
11.10.2013, 18:23     указатели
Ответ Создать тему
Опции темы

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