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

Двойной указатель на объект класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ LibTIFF и geotiff http://www.cyberforum.ru/cpp-beginners/thread1544662.html
Здравствуйте. Подскажите, пожалуйста, как в С++ можно прочитать файлы формата geotiff, сделать выбор профиля местности между 2 точками (даны координаты двух точек) и построить этот профиль местности?
C++ Создать "мелодию" - последовательный контейнер элементов класса "звук" Есть задание и код к нему, напишите, пожалуйста, комментарий к каждой строке. Заранее спасибо! Создать "мелодию" - последовательный контейнер элементов класса "звук" (поля: высота ноты, длительность звучания). Сделать началом мелодии первый звук заданной высоты (циклически сдвинув элементы) #include <iostream> #include <fstream> #include <string> #include <list> #include <deque>... http://www.cyberforum.ru/cpp-beginners/thread1544659.html
C++ Добавить в список после элементов с отрицательным информационным полем элемент с информационным полем равный 0
Здравствуйте,нужна помощь,не знаю как сделать это задание,просто не разбираюсь,пожалуйста окажите помощь Тип информационного поля double. Добавить в список после каждого элемента с отрицательным информационным полем элемент с информационным полем равным 0.
C++ Директива include
Допустим я создаю файл header.h:int N();, а так же файл header.cpp:#include "header.h" int N() { return 2; } Каким образом подключая в своем файле библиотеку header.h и вызывая функцию N, я получаю результат 2. В этом файле-заголовке только прототип!!! Он никак же не связан с файлом header.cpp
C++ Сумма ряда http://www.cyberforum.ru/cpp-beginners/thread1544622.html
{delete} Нету времени в это вникать, завтра нужно сдать работу. Помогите пожалуйста, разобраться в коде и обьяснить случай Е=0 смогу, но с теорией рядов у меня все печально. Заранее спасибо! Добавлено через 10 часов 33 минуты Люди, пожалуйста - я не хочу незачет !))){delete}, можем даже минимальное вознаграждение обсудить. Тема актуальна еще 2 часа Нарушены правила форума п.5.18 и 4.6
C++ В чём разница между состояниями потока failbit и badbit? В чём разница между failbit и badbit? Если просто просматривать ошибку ввода в моём случае, то он всегда пишет failbit (в цикле вайл при проверке условия ввода) #include <iostream> #include <conio.h> using std::cout; using std::cin; using std::endl; int main () { подробнее

Показать сообщение отдельно
hoggy
5030 / 2113 / 403
Регистрация: 15.11.2014
Сообщений: 4,797
Завершенные тесты: 1
05.10.2015, 09:19     Двойной указатель на объект класса
Цитата Сообщение от Default_070 Посмотреть сообщение
как это применять, зачем нужно?
например, сишники применяют такое для перенацеливания указателя:

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
#include <iostream>
 
void foo(int**);
 
int main()
{
    std::cout << "Hello, world!\n";
    
    int v = 10;
    
 
    int* p = &v;
    int** pp = &p;
 
    std::cout<< *p << std::endl;
    
    foo(pp);
    
    std::cout<< *p << std::endl;
}
 
void foo(int** pp)
{
    static int v = 20;
    *pp = &v;
}

другой пример, допустим нужно реалоцировать память:

http://rextester.com/OLVM85635

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
#include <iostream>
 
void badRealoc(int* target, const size_t count);
void goodRealoc(int** target, const size_t count);
void excellentRealoc(int*& target, const size_t count);
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    
    // --- выделили память
    int* p = new int[1024];
    
    // --- покажем адрес начала блока данных
    std::cout << "address = " << p << std::endl;
    
    // --- вдруг нам очень сильно понадобилось изменить
    // количество элементов
    
    badRealoc(p, 10);
    
    // --- покажем новый адрес начала блока данных
    std::cout << "address = " << p << std::endl;
    
    // и о боже! адрес не изменился!
    // утечка памяти.
    // а все поотому, что все аргументы функций всегда копируются.
    // и функцию badRealoc попала копия узкателя, а не оригинал
    // новый адрес начала блока данных получила копия указеля
    // а вовсе не оригинал
    // оригинал же остался без изменений
    // функция отрабала, и адрес данных был утерян
    
    // что бы такой гадости не происходило
    // сишники используют указатель на указатель
    
    // --- заново выделяем память
    // потому что старую мы уже профакапили
    // и указатель стал невелидным
    p = new int[1024];
    goodRealoc(&p, 10);
    
    // --- покажем новый адрес начала блока данных
    // и убедимся что он действительно изменился
    std::cout << "address = " << p << std::endl;
    
    
    // --- нужно так же заметить: указатель на указатель
    // это - сишный прием, и используется он либо на языке си
    // либо при разработке системного апи
    // либо всякого рода балбесами, которые не осилили ссылки.
    
    // ссылки - более удобное, простое, и безопасное средство
    // эффективной передачи данных.
    
    
    // --- выделили память
    p = new int[1024];
    excellentRealoc(p, 10);
    
    // --- покажем новый адрес начала блока данных
    // и убедимся что он действительно изменился
    std::cout << "address = " << p << std::endl;
    
}
 
 
 
void badRealoc(int* target, const size_t count)
{
    delete [] target;
    target = new int[count];
}
 
void goodRealoc(int** target, const size_t count)
{
    delete [] *target;
    *target = new int[count];
}
 
void excellentRealoc(int*& target, const size_t count)
{
    delete [] target;
    target = new int[count];
}
Добавлено через 50 секунд
Цитата Сообщение от zss Посмотреть сообщение
Правда, есть еще один случай
собственно именно этот случай и является основным кейсом двойного укзателя.
применяется в сишном апи (winapi, например)
 
Текущее время: 06:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru