Важная информация
Показано с 1 по 3 из 3

Тема: Массив указателей на объекты класса C++

  1. #1 Массив указателей на объекты класса C++ 
    Новичок
    Регистрация
    11.09.2018
    Сообщений
    1
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Хелп. Помогите пожалуйста. Не могу понять задание
    Создать массив указателей на объекты класса, описывающего насекомых
    (количество ног, наличие крыльев, цвет и т.д.). Создать новый массив указателей на объекты с летающими насекомыми.


    Была идея,
    1. создать класс насекомое, описать объекты - ноги, крылья, цвет и т.д
    2. сделать массив таких классов (вроде бы получилось)
    А дальше с этими указателями ничего не понимаю. Указатель на класс нужно делать или как сделать к объектами, да еще и массив ????????
    А если делать указатель на класс, то как потом вытащить оттуда наличие крыльев, это же объект???
    Помогите пожалуйста

    Попытки были, 2ой день сижу((
    Header.h
    C++ Code:
    1. #define insect_hpp
    2. #include <iostream>
    3. using namespace std;
    4. enum colortype { зеленый = 1, коричневый, мультицвет };
    5. enum nametype { жук = 1, клоп, муравей, гусеница, бабочка };
    6. class insect
    7. {
    8. public:
    9. insect();
    10. void Print();
    11.  
    12. unsigned insect::Setinsect(nametype name, int paw, int wing, colortype color);
    13. private:
    14. int paw; //количество лап
    15. int wing; // количество крыльев
    16. colortype color; //цвет
    17. nametype name;
    18. };
    19.  
    20.  
    21. /*бабочка - multicolor, 6 лап, 4 крыла
    22. гусеница - multicolor, 6 лап, 0 крыльев
    23. жук - зеленый, 6 лап, 4 крыла
    24. клоп - коричневый, 6 лап, 0 крыльев
    25. муравей - коричневый, 6 лап, 0 крыльев
    26.  
    27. */

    Source.cpp

    C++ Code:
    1. #include "stdafx.h"
    2. #include "Header.h"
    3. using namespace std;
    4.  
    5. insect::insect()
    6. {
    7. this->name = nametype(05);
    8. this->paw = 6;
    9. this->wing = 4;
    10. this->color = colortype(03);
    11.  
    12. }
    13. unsigned insect::Setinsect(nametype name, int paw, int wing, colortype color)
    14. {
    15. int flag = 0;
    16. this->name = name;
    17. this->paw = paw;
    18. this->wing = wing;
    19. this->color = color;
    20. return flag;
    21.  
    22. }
    23.  
    24. void insect::Print()
    25. {
    26. std::cout << "Название - " << name;
    27. std::cout << "  крыльев - " << wing;
    28. std::cout << "  лап - " << paw;
    29. std::cout << "  цвет - " << color;
    30. std::cout << "  \n  ";
    31. }


    main.cpp

    C++ Code:
    1. #include "stdafx.h"
    2. #include <iostream>
    3. #include "Header.h"
    4. using namespace std;
    5. int main()
    6. {
    7.  
    8. setlocale(LC_ALL, "Russian");
    9.  
    10. int no = 3;
    11. int i;
    12. int w, p;
    13. nametype n;
    14. colortype c;
    15.  
    16. int d;
    17. insect a[3];
    18. for (i = 0; i < no; i++)
    19. {
    20.  
    21. cout << "# название";
    22. cin >> d;
    23. if (d == 1) {
    24. n = nametype(1);
    25. }
    26. if (d == 2) {
    27. n = nametype(2);
    28. }
    29. if (d == 3) {
    30. n = nametype(3);
    31. }
    32. if (d == 4) {
    33. n = nametype(4);
    34. }
    35. if (d == 5) {
    36. n = nametype(5);
    37. }
    38. cout << "крылья ";
    39. cin >> w;
    40. cout << "лапы ";
    41. cin >> p;
    42. int d2;
    43. cout << "цвет ";
    44. cin >> d2;
    45. if (d2 == 1) {
    46. c = colortype(1);
    47. }
    48. if (d2 == 2) {
    49. c = colortype(2);
    50. }
    51. if (d2 == 3) {
    52. c = colortype(3);
    53. }
    54. a[i].Setinsect(n, w, p, c);
    55. }
    56. for (i = 0; i < no; i++)
    57. {
    58. a[i].Print();
    59. }
    60. return 0;
    61. }
    Ответить с цитированием  
     

  2. #2  
    Разбирающийся
    Регистрация
    09.11.2013
    Сообщений
    91
    Сказал(а) спасибо
    17
    Поблагодарили 44 раз(а) в 26 сообщениях
    класс это прототип объектов, создать указатель на объект класса можно вызвав его конструктор
    Ответить с цитированием  
     

  3. #3  
    Новичок
    Регистрация
    16.07.2018
    Сообщений
    12
    Сказал(а) спасибо
    0
    Поблагодарили 11 раз(а) в 8 сообщениях
    C++ Code:
    1. Class Aninal {}; // класс, внутрь допиши конструктор и пр.
    2.  
    3. Animal animal; // обьект класса, в данном случае вызывается конструктор без параметров
    4.  
    5. Animal *panimal; // указатель на обьект
    6. panimal = &animal; // теперь все изменения обьекта по указателю - это операции над обьектом animal
    7.  
    8. // с другой стороны...
    9.  
    10. panimal = new Animal[10];
    11. // тут создан массив из 10 обьектов
    12. cout << panimal[3].age();
    13. // тут мы обращаемся к методу третьего обьекта в массиве
    14.  
    15. Массив обьектов это не лучшая идея. Во первых чтобы это работало нужно обязательно описывать конструктор по умолчанию(без параметров). Во вторых это должен быть массив конкретных (не абстрактных) классов. В третьих это часто неэффективно, ну если класс имеет много полей и не поддерживает семантику перемещения - то сортировка, например, может работать сильно дольше. Но можно же создать массив указателей...
    16.  
    17. Animal** animals;
    18. // теперь надо выделить память под элементы массива:
    19. animals = new Animal*[10];
    20. // тут тип элемента - указатель на Animal
    21. //  а значит использовать его можно как я описывал выше. Т.е. либо выделить там память под массив обьектов (в итоге получится двумерный массив). Либо как массив указателей ( что от тебя и требуют).
    22.  
    23. Ну и обрабатывай дальше жтот массив...
    24.  
    25. for (int i = 0; i < 10; ++i) {
    26.   animals[i] = new Animal(12, 3, 55); // какой то конструктор
    27.   cout << animals[i]->age();
    28.   cout << (*animals[i]).name();
    29. }
    Ответить с цитированием  
     

  4. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (12.09.2018), Free Admin (14.09.2018), KariLex (12.09.2018)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Циклы, объекты, потоки
    от Good.Morning в разделе FreeBasic
    Ответов: 15
    Последнее сообщение: 26.12.2015, 20:55
  2. Ответов: 2
    Последнее сообщение: 11.01.2015, 18:52
  3. Задача на объекты, С++, visual studio
    от Аделина в разделе Архив
    Ответов: 3
    Последнее сообщение: 25.04.2014, 11:20
  4. Ответов: 2
    Последнее сообщение: 21.01.2011, 21:23
  5. Ответов: 11
    Последнее сообщение: 25.12.2010, 02:33
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •