0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 10
|
||||||
1 | ||||||
Использование классов в С++. Простые объекты.17.05.2011, 08:55. Показов 6381. Ответов 15
Метки нет (Все метки)
Задание:
Описать объект, включающий заданные поля и методы. Написать программу, которая создает массив объектов и список объектов и содержит процедуры, работающие с указанны-ми структурами. Объект - некоторый товар в магазине. Параметры: наименование, количество и заку-почная цена. Методы: конструктор и процедура, определяющая стоимость товара исходя из заданного процента прибыли. Определить суммарную стоимость всех товаров в магазине. Реализовать два варианта (с массивом и списком). Написал пока только для списка, с массивом чуть позже напишу. Я создаю класс по заданию, список реализую через структуру ( 1 поле переменная типа класса, 2 поле - указатель ). У меня такой вопрос. Как получить доступ к полям и методам класса, через указатель ? Код программы
0
|
17.05.2011, 08:55 | |
Ответы с готовыми решениями:
15
Объекты классов не видны во вложенной функции одной из классов Преобразования объектов классов в объекты других классов Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов Простые объекты |
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
17.05.2011, 09:03 | 2 |
1. Принцип инкапсуляции требует, чтобы поля и методы были в приватной части класса.
2. Для получения и изменения полей пишут пару функция get/set - геттеры и сеттеры. 3. p->объект.поле, где p указывает на нужный элемент.
0
|
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 10
|
||||||
17.05.2011, 15:06 [ТС] | 3 | |||||
Можете объяснить на примере ?
Добавлено через 1 минуту П.с. исправил цикл for
При компиляции появляется такие ошибки error C2512: Element: нет подходящего конструктора по умолчанию error C2352: List::PriceGood: недопустимый вызов нестатической функции-члена error C2275: List: недопустимое использование этого типа в качестве выражения Кому не сложно, кто хорошо разбирается в программировании на С++, объясните мне как реализовать доступ к полям объекта и методам класса динамического списка организованного через структуру.
0
|
43 / 43 / 13
Регистрация: 17.05.2011
Сообщений: 162
|
||||||
17.05.2011, 17:00 | 4 | |||||
0
|
17.05.2011, 17:01 | 5 |
Брюс Эккель в книге "Философия С++" ("Thinking in C++") писал о двояком понимании термина инкапсуляция, в общем случае это просто объединения кода и данных в одну логическую единицу (а не сокрытие кода/данных).
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
17.05.2011, 17:44 | 6 |
Не-е-е-е-е... Брюс Эккель может писать, что ему угодно.... А Парнас еще в конце 60-х писал об инкапсуляции именно в смысле сокрытия информации. Об этом писал Фредерик Брукс в своей знаменитой книге "Мифический человеко-месяц"... В первом издании он писал, что спорил по этому поводу с Парнасом. А в 90-х годах, когда было переиздание, так и написал: Парнас был прав!
1
|
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 10
|
||||||
17.05.2011, 18:45 [ТС] | 7 | |||||
Ребят, неужели ни кто помочь не может ??? Я не прошу решить задачу, прошу только подредактировать фрагмент.
Добавлено через 37 минут Ну что ж спасибо, за ответы. Не могу сказать они мне сильно помогли, паблик мне не мешал выполнить поставленную задачу, а сет-гет многие вовсе советуют не использовать, да и я не вижу в них особого смысла. Меня больше интересует другой момент, как , при переходе/создании нового структурного элемента (в моем случае это переменная Tovar) через указатель обратиться к функциям и полям.
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
17.05.2011, 19:04 | 8 |
1. У тебя в классе Element отсутствует конструктор по умолчанию. Все бы ничего, но у тебя и в классе List отсутствует конструктор по умолчанию! Поэтому и не выходит создать объект - нет конструктора, вызывать нечего!
2. И вызов метода прописан, как статический. А объявлен он как обычный...
0
|
4769 / 2579 / 892
Регистрация: 29.11.2010
Сообщений: 5,581
|
||||||
17.05.2011, 19:10 | 9 | |||||
2
|
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 10
|
||||||
17.05.2011, 19:15 [ТС] | 10 | |||||
1.Хорошо, как реаизовать конструктор по умолчанию, и чем отличнается по умолчание от не по умолчанию ?
2. В чем разница статического от обычного ? В Лист есть конструктор
Самое понятное объяснение - это наглядный пример. Кто в силах написать 3 строчки кода ? ) Добавлено через 1 минуту lemegeton, спасибо. Сейчас буду разбирать.
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||
17.05.2011, 19:24 | 11 | |||||
Конструктор по умолчанию - это конструктор без аргументов. Если нет такого конструктора, но невозможно создавать объекты без инициализации. А у тебя есть в структуре List Good - без инициализации. Написав собственный конструктор инициализации ты запретил создавать конструктор по умолчанию. Теперь надо самому его написать. Но лучше сделай конструктор инициализации и конструктором по умолчанию:
0
|
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 10
|
|
17.05.2011, 20:27 [ТС] | 12 |
Что ж спасибо Валерий, с конструктором вроде все ясно, как же быть с указателями и обращением к полям ?
lemegeton, решение напоминает поездку в Москву через Владивосток, не в обиду конечно )), но у меня идет строгое ТЗ. Создать объект с заданными полями и составить список объектов/массив объектов. п.с. Посоветуйте статью по иерархиям классов в C++. Добавлено через 1 минуту А разве имя параметра не может состоять из одного символа ?
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
17.05.2011, 23:25 | 13 |
1. Обычно имя - это некий string;
2. Я ж уже писал: p->объект.поле... К методу: p->объект.метод()
0
|
4769 / 2579 / 892
Регистрация: 29.11.2010
Сообщений: 5,581
|
|
17.05.2011, 23:49 | 14 |
Надо же. Все, что сложнее a = a + b уже напоминает <нужное вписать>.
"Объект с заданными полями" - class Product, имеется. Объект, составляющий двусвязный список объектов - class List, имеется, обеспечивает последовательный и случайный доступ к объектам, добавление элементов в конец списка. Возможно, итераторы сложно понять -- я там спецом пометил, откуда и до куда удалять. Не обязательно пытаться осмыслить и сдать именно мой код. В коде можно увидеть, как происходит работа со строками, как создавать, удалять связные списки и другие полезные для данной задачи вещи.
1
|
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 10
|
|
19.05.2011, 01:09 [ТС] | 15 |
Разобрал, оказывается достаточно грамотно все описано )) , еще раз спасибо )), код использовал "как обучающий". Если кому то будет интересно, чуть позже выложу свою версию программы с наглядным использованием наследования и сложного полиморфизма Всем удачи !
Добавлено через 14 минут Сейчас попытался скомпилировать, выпадает ошибка error C4716: operator<<: должна возвращать значение (130 строка)
0
|
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
|
||||||
19.05.2011, 02:23 | 16 | |||||
здесь забыли вернуть поток
1
|
19.05.2011, 02:23 | |
19.05.2011, 02:23 | |
Помогаю со студенческими работами здесь
16
Как описать простые объекты? DirectX: Как динамически создавать простые 3d объекты Создать приложение, рисующие простые графические объекты Объекты и экземпляры классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |