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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
#1

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

17.04.2013, 14:39. Просмотров 190. Ответов 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;
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 14:39     Операция new. Указатель на указатель
Посмотрите здесь:

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель - C++
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef struct tree { int data; tree *left, *right,...

Про указатель *, указатель на указатель **, и про new - C++
#include &quot;stdafx.h&quot; class neuro { public: double *inputs; int inputs_count; neuro(int uc, double ii ) { ...

Указатель - C++
const int MAX = 5; void f(double*); int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;Russian&quot;); double array = { 10.0,...

Указатель - C++
unsigned short b=0xffff; char *a=malloc(65536); for(int i=0;i&lt;65536;i+=2) { *(a+i)=b; } free(a); Добрый день! ...

Указатель - C++
Можете объяснить устройство работы ,мне казалось что если вызвать просто ptr то должен возвратиться адрес,а если * ptr ,то значение,здесь...

Указатель - C++
Здравствуйте! При прочтении одной книжки наткнулся на нечто не совсем понятное. #include &lt;iostream&gt; #include &lt;string&gt; using...

Указатель((( - C++
Составить программу, которая подсчитывает для из массивов А и В количество различных по значению элементов в каждом из этих массивов....

Указатель на указатель - C++
Есть задача: Дана динамическая строка размер массива символов которой точно соответствует строке. написать функцию которая добавляет...

указатель на this - C++
Если в описании метода класа написать list n = *this; list - имя класса, то в n будет содержаться указатель на текущий обьект, ссылка...

Указатель - C++
Имеется код: // header #ifndef DMA_H_ #define DMA_H_ #include &lt;iostream&gt; class abs { private:


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru