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

Операция new. Указатель на указатель - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удаление из массива а)Все четные элементы б)Все элементы с четными индексами http://www.cyberforum.ru/cpp-beginners/thread840491.html
помогите=)
C++ Даны натуральные числа а1, а2,., а n . Указать те из них, у которых остаток от деления на М равен L, где (0 ≤ L ≤ M-1) Даны натуральные числа а1, а2,..., аn . Указать те из них, у которых остаток от деления на М равен L, где (0 ≤ L ≤ M-1) http://www.cyberforum.ru/cpp-beginners/thread840489.html
C++ Определите фамилии пассажиров с массой багажа более 10 кг
программа для решения задач. Программы снабдите подробными комментариями. Подготовьте блок-схему алгоритма Найдите массу груза пассажирского самолета. Фамилии пассажиров и масса багажа ...
C++ Получите третий массив из исходных по правилу
программа для решения задач. Программы снабдите подробными комментариями. Подготовьте блок-схему алгоритма Сформируйте два массива, по 10 элементов в каждом, с помощью датчика случайных ...
C++ Дана последовательность. Выяснить, будет ли она возрастающей http://www.cyberforum.ru/cpp-beginners/thread840481.html
программа для решения задач. Программы снабдите подробными комментариями. Подготовьте блок-схему алгоритма Дана последовательность действительных чисел а1, а2,..., аn. Выяснить, будет...
C++ Составьте программу на С++ Решение игр с нулевой суммой. Буду очень благодарна:) подробнее

Показать сообщение отдельно
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94

Операция new. Указатель на указатель - C++

17.04.2013, 14:39. Просмотров 194. Ответов 0
Метки (Все метки)

Всем aloha. Проблема в следующем: в своей програмке я создаю указатель на указатель
C++
1
person** ptrP
затем инициализирую его массивом указателей на объекты класса person
C++
1
person** ptrP = new person*[12]
далее присваиваю каждому указателю адрес инициализированного объекта person, но ничего не получается по какой то причине. не работает даже вызов функции display_person(), для любого из указателей, хотя даже пустому указателю на объект person конструктор должен был задать значение полей first_name и last_name "пусто". Однако этого не происходит. Подскажите пожалуйста в чем тут дело, уже всю голову сломал. Другие способы реализации данной программы меня не интересуют, хотел сделать именно вот так, но почему то не получается, вроде всё делаю правильно ведь. Конструктор перегрузил, присваивание тоже, в чем же проблема, не пашут именно указатели. Вот код:
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
//---------------------------------------------------------------------------
 
#include <iostream>
#include <set>
#include <algorithm>
#include <string>
using namespace std;
 
//---------------------------------------------------------------------------
class person
{
 private:
  string first_name;
  string last_name;
  long phone_number;
 public:
  person (): first_name("emty"), last_name("emty"), phone_number(0L)
  {}
  person( string fn, string ln, long pn ) : first_name (fn), last_name(ln),
  phone_number(pn)
  {}
  person(person& pers)
  {
   first_name = pers.first_name;
   last_name = pers.last_name;
   phone_number = pers.phone_number;
  }
  friend bool operator < ( const person&, const person& );
  friend bool operator == ( const person&, const person&);
  person& operator = ( const person& );
  void display_person() const
  {
        cout << "\n Person's name: " << first_name
        << "\n Person's lastname: " << last_name
        <<"\n Person's phonenumber: " << phone_number << endl;
  }
};
//---------------------------------------------------------------------------
bool operator < (const person& p1, const person& p2)
{
 if(p1.last_name == p2.last_name)
        return (p1.first_name < p2.first_name ) ? true : false;
 return (p1.last_name < p2.last_name) ? true : false;
}
//---------------------------------------------------------------------------
bool operator == (const person& p1, const person& p2)
{
 return ( p1.first_name == p2.first_name &&
  p1.last_name == p2.last_name )? true : false;
}
//---------------------------------------------------------------------------
person &person :: operator = ( const person& p1 )
{
 first_name = p1.first_name;
 last_name = p1.last_name;
 phone_number = p1.phone_number;
 return *this;
}
class displayPerson
{
 public:
  void operator()(const person* ptrP) const
  {
   {ptrP->display_person();}
  }
};
//---------------------------------------------------------------------------
class comparePerson
{
 public:
  bool operator()(const person* ptrP1, const person* ptrP2)
  {
        return *ptrP1 < *ptrP2;
  }
};
//---------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
 multiset<person*, comparePerson()> setPers;
 person** ptrP = new person*[12];
 *ptrP[0] = person("Jack", "Sallywan", 9031917602);
 *ptrP[1] = person("Forest","Gump",9152120632);
 *ptrP[2] = person("Malzahar", "The Prophet", 66666666);
 *ptrP[3] = person("Eugeni", "Shteine", 9164241233);
 *ptrP[4] = person("Dominic","Inferno", 99966699);
 *ptrP[5] = person("Lucas", "Kayne", 21345232);
 *ptrP[6] = person("Bob", "Marley", 12333123);
 *ptrP[7] = person("James","Sunderland", 32323222);
 *ptrP[8] = person("Forest","Gump", 4545343);
 *ptrP[9] = person("Tom","Feedle", 80908780);
 *ptrP[10] = person("Death","Decay", 999999999);
 *ptrP[11] = person("Sylvana","Windrunner", 7878787877);
 
 for( int j = 0; j < 12; j++ )
        setPers.insert(ptrP[j]);
 
 for_each(setPers.begin(), setPers.end(),displayPerson());
 system("PAUSE");
 
        return 0;
}
//---------------------------------------------------------------------------
Добавлено через 16 минут
Я идиот. Вопрос решен) и указатель на указатель тут совсем не нужен, можно использовать обычный массив указателей на person с передачей в алгоритм for_each() адресов объектов.
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
//---------------------------------------------------------------------------
 
#include <iostream>
#include <set>
#include <algorithm>
#include <string>
using namespace std;
 
//---------------------------------------------------------------------------
class person
{
 private:
  string first_name;
  string last_name;
  long phone_number;
 public:
  person (): first_name("emty"), last_name("emty"), phone_number(0L)
  {}
  person( string fn, string ln, long pn ) : first_name (fn), last_name(ln),
  phone_number(pn)
  {}
  person(person& pers)
  {
   first_name = pers.first_name;
   last_name = pers.last_name;
   phone_number = pers.phone_number;
  }
  friend bool operator < ( const person&, const person& );
  friend bool operator == ( const person&, const person&);
  person& operator = ( const person& );
  void display_person() const
  {
        cout << "\n Person's name: " << first_name
        << "\n Person's lastname: " << last_name
        <<"\n Person's phonenumber: " << phone_number << endl;
  }
};
//---------------------------------------------------------------------------
bool operator < (const person& p1, const person& p2)
{
 if(p1.last_name == p2.last_name)
        return (p1.first_name < p2.first_name ) ? true : false;
 return (p1.last_name < p2.last_name) ? true : false;
}
//---------------------------------------------------------------------------
bool operator == (const person& p1, const person& p2)
{
 return ( p1.first_name == p2.first_name &&
  p1.last_name == p2.last_name )? true : false;
}
//---------------------------------------------------------------------------
person &person :: operator = ( const person& p1 )
{
 first_name = p1.first_name;
 last_name = p1.last_name;
 phone_number = p1.phone_number;
 return *this;
}
class displayPerson
{
 public:
  void operator()(const person* ptrP) const
  {
   {ptrP->display_person();}
  }
};
//---------------------------------------------------------------------------
class comparePerson
{
 public:
  bool operator()(const person* ptrP1, const person* ptrP2)
  {
        return *ptrP1 < *ptrP2;
  }
};
//---------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
 multiset<person*, comparePerson()> setPers;
 person ptrP[12];
 ptrP[0] = person("Jack", "Sallywan", 9031917602);
 ptrP[1] = person("Forest","Gump",9152120632);
 ptrP[2] = person("Malzahar", "The Prophet", 66666666);
 ptrP[3] = person("Eugeni", "Shteine", 9164241233);
 ptrP[4] = person("Dominic","Inferno", 99966699);
 ptrP[5] = person("Lucas", "Kayne", 21345232);
 ptrP[6] = person("Bob", "Marley", 12333123);
 ptrP[7] = person("James","Sunderland", 32323222);
 ptrP[8] = person("Forest","Gump", 4545343);
 ptrP[9] = person("Tom","Feedle", 80908780);
 ptrP[10] = person("Death","Decay", 999999999);
 ptrP[11] = person("Sylvana","Windrunner", 7878787877);
 
 
 for( int j = 0; j < 12; j++ )
        setPers.insert(&ptrP[j]);
 
 
 
 
 
 for_each(setPers.begin(), setPers.end(),displayPerson());
 system("PAUSE");
 
        return 0;
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru