Форум программистов, компьютерный форум 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 кг
программа для решения задач. Программы снабдите подробными комментариями. Подготовьте блок-схему алгоритма Найдите массу груза пассажирского самолета. Фамилии пассажиров и масса багажа хранятся в одномерных массивах. Определите фамилии пассажиров с массой багажа более 10 кг.
C++ Получите третий массив из исходных по правилу
программа для решения задач. Программы снабдите подробными комментариями. Подготовьте блок-схему алгоритма Сформируйте два массива, по 10 элементов в каждом, с помощью датчика случайных чисел. Получите третий массив по правилу: если соответствующие элементы исходных массивов принадлежат заданному с клавиатуры интервалу, то присвойте элементу нового массива значение 1,...
C++ Дана последовательность. Выяснить, будет ли она возрастающей http://www.cyberforum.ru/cpp-beginners/thread840481.html
программа для решения задач. Программы снабдите подробными комментариями. Подготовьте блок-схему алгоритма Дана последовательность действительных чисел а1, а2,..., аn. Выяснить, будет ли она возрастающей.
C++ Составьте программу на С++ Решение игр с нулевой суммой. Буду очень благодарна:) подробнее

Показать сообщение отдельно
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
17.04.2013, 14:39     Операция new. Указатель на указатель
Всем 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;
}
//---------------------------------------------------------------------------
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru