roalang
Интересующийся
Offline
|
|
« : 13-06-2009 17:33 » |
|
Пожалуйста, помогите разобраться в ООП. //класс Person class Person { public: //конструктор объекта, аргументы инициализируют все данные объекта Person(int number, char* fio, int man_woman, double age); //конструктор объекта по умолчанию (без аргументов) Person(); //функция вывода данных на экран void Print() ; //функция ввода данных с клавиатуры void Input();
private: // данные имеют закрытый уровень доступа int number_; // Номер человека (целый тип) char _fio[64];// ФИО (символьный массив ) int man_woman_;// Пол (логический тип: 0-муж., 1-жен.) double age_; // Возраст (вещественный тип) }; \\создаю второй класс, который должен выводить данные, я могла ввести данные class Dream : public Person { public: void Print(); void Input();
private: int deti_; } ;
Второй файл содержит #include <iostream.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include "main.h"
Person::Person(int number, char* fio, int man_woman, double age): number_(number), man_woman_(man_woman), age_(age) { strcpy(_fio, fio); } void Person::Print() { cout<<"Number" <<number_<< "age"<< age_<< "Pol (0-man, 1-woman)"<<man_woman_<<endl; } (void Dream:: Print() { cout<<"Deti"<<deti_<<endl; }) void Person::Input() { cout << "Input new data person:" << endl; cout << "Input number:"; //Ввод номера cin >> number_; cout << "Input name"; cin.getline(_fio,sizeof(_fio),'\n');//ввод строки с ФИО cout << "Input age:"; cin >>age_; cout << "Input pol (0-man, 1-woman)"; cin >> man_woman_; } (void Dream::Input() { cout << "Input deti"; cin >>deti_; }) int main() { Person p1(1,"Иванов Николай Павлович",0,23.6); p1.Print(); Person* p2 = new Person(2, "Петухова Мария Ивановна", 1, 24.9); p2->Print(); delete p2;//удаление динамического объекта из памяти Person p3;//локальный объект, создаваемый конструктором p3.Input();//ввод данных с клавиатуры p3.Print();//вывод на экран cout << "Для выхода из программы нажмите любую клавишу..."; getch(); return EXIT_SUCCESS;//нормальное завершение работы программы }
Как сделать, чтоб класс Dream заработал?
|
|
« Последнее редактирование: 29-06-2009 09:21 от Sel »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #1 : 13-06-2009 17:38 » |
|
Чтоб заработал как что? Опиши, что пытаешься сделать, и что не устраивает.
Просто так код читать как-то не хочется, тем более, что он очень плохо отформатирован. Вскользь заметил, что у класса предка методы, перекрываемые потомком, не являются виртуальными. Возникает вопрос: коль уж речь про ООП и наследование, то разобралась ли ты с понятием виртуальных функций? Заодно, не вполне ясно, какую именно задачу ты пытаешься решить наследованием. Наследование - это ещё не всё, что есть в ООП.
|
|
|
Записан
|
|
|
|
roalang
Интересующийся
Offline
|
|
« Ответ #2 : 13-06-2009 17:53 » |
|
Было дано задание, показать свои знания в ООП на этом языке. Пока я разбираюсь с использованием классов.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #3 : 13-06-2009 19:09 » |
|
Особенно радуют скобки вокруг реализации методов Dream. Это компилируется? Было дано задание, показать свои знания в ООП на этом языке. Может представления о языке кое-какие и есть, но вот по части ООП, будто бы, самые поверхностные.
|
|
« Последнее редактирование: 13-06-2009 19:10 от Dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
RXL
|
|
« Ответ #4 : 13-06-2009 19:26 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
roalang
Интересующийся
Offline
|
|
« Ответ #5 : 14-06-2009 03:13 » |
|
Особенно радуют скобки вокруг реализации методов Dream. Это компилируется? Может представления о языке кое-какие и есть, но вот по части ООП, будто бы, самые поверхностные.
Круглые скобки я поставила, чтоб отделить то, что и так не работает.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #6 : 14-06-2009 07:58 » |
|
Что ты понимаешь под термином "не работает"? Код может быть с синтаксическими ошибками - тогда он не будет компилироваться. Ещё он может быть с логическими ошибками - и тогда он может или выдавать не тот результат, или вовсе приводить к завершению программы.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #7 : 14-06-2009 08:04 » |
|
RXL, не, не особо - если только для общего развития. Тут надо именно язык и связанные с ним тонкости. Например, постичь "таинство" виртуальных функций - как они работают, чем отличаются от обычных. А вот понимание, зачем вообще они нужны, проистекает из понимания переменной, типа переменной, значения переменной, АТД и того, как работает компилятор. Правда, к ООП это всё не относится. И только потом, когда всплывает словечко "полиморфизм", тайный смысл виртуальных функций начинает раскрываться
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Вад
|
|
« Ответ #8 : 14-06-2009 08:25 » |
|
Кстати, попробовал закинуть приведённый выше код в g++ (разумеется, без круглых скобок, и поправив iostream.h на iostream, подключив пространство имён std и убрав conio.h и getch с глаз долой). И код всё равно не скомпилировался. Нет явного определения конструктора по умолчанию для Person (ошибка линковки) + предупреждения насчёт передачи строковых констант как обычных char*. Исправив ошибки, успешно скомпилировал.
Общие рекомендации: Если есть возможность, перестать пользоваться морально устаревшей средой и компилятором, несовместимыми со стандартом C++. Передавать строковые константы (и вообще все строки, не требующие изменений) как минимум в виде const char*. Определить конструктор по умолчанию для Person. Объяснить, что всё-таки "не работает" в Dream. Пока что, думаю, это виртуальные функции являются камнем преткновения - вернее, их отсутствие.
|
|
|
Записан
|
|
|
|
Люсь
|
|
« Ответ #9 : 15-06-2009 04:39 » |
|
Читаю Бьерна Страуструпа, "Язык программирования С++", по этому учебнику заданы нам 23 лабораторные работы, решение которых призвано привить студентам навыки обращения с ООП, а заодно знания об ООП и С++.
Надеюсь, что с помощью такой организации учёбы я таки осилю ООП, до сих пор в течении 7-8 лет оно мне давалось очень плохо )
|
|
|
Записан
|
Посторонним просьба не беспокоить! ------------------------------------------------- O (I) Rh +
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #10 : 15-06-2009 09:37 » |
|
Бьерна Страуструпа, "Язык программирования С++", по этому учебнику Это ни в коем разе не учебник (по структуре и манере изложения). Скорее это справочник. А что касается ООП, то оно там привлекается для пояснений конструкций языка и приёмов программирования, но систематического изложения ООП там нет. Именно учебники по C/C++ есть. Например, Подбельского и Фомина. С учебниками по ООП совсем туго. Есть адекватные издания, но они более похожи на наборы лекций, чем на учебники. Есть по форме учебники, но по содержанию неадекватные.
|
|
« Последнее редактирование: 15-06-2009 09:41 от Dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #11 : 15-06-2009 10:17 » |
|
...решение которых призвано привить студентам навыки обращения с ООП, а заодно знания об ООП и С++.
Блин как всё запущено... Люсь, сочувствую. По С++ разговору нет - хорошая книжка. Но вот про остальное... Скорее это справочник. Во-во, именно справочник, хороший, толстый и розовощёкий, но... по языку С++. Каким боком знание одного из языков программирования (кстати не самого строгого из ООП языков), позволит понять ООП?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Люсь
|
|
« Ответ #12 : 15-06-2009 10:20 » |
|
Джон, короч не знаю, я сделала такое суждение потому, что курс называется "Объектно-ориентированное программирование", других книг для изучения не рекомендовано.
|
|
|
Записан
|
Посторонним просьба не беспокоить! ------------------------------------------------- O (I) Rh +
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #13 : 15-06-2009 12:18 » |
|
Люсь, на прошлой неделе на свадьбе был. И как-то там невеста развспоминалась, что был у них предмет про C++. Я тогда для себя отметил, что предмет-то у них был ООП, но спустя несколько лет у бывших студентов в памяти осталось, что их учили C++. (Не я их учил ) Вообще это, конечно, трагедия (с моей точки зрения). Кстати, свою программу обучения ООП я уже описывал: https://forum.shelek.ru/index.php/topic,19952.msg201135.html#msg201135как говорится, сравни с содержанием Страуструпа Довольно мало общего.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Люсь
|
|
« Ответ #14 : 15-06-2009 12:30 » |
|
Спасибо, ознакомлюсь.
У меня тоже складывается ощущение, что у нас изучают только С++. Когда в методических указаниях было разрешено использовать для реализации Delphi (ну в качестве разнообразия), то на самой сессии оказалось, что предпочтительнее использовать опять С++.
Непонятно мне пока, короче.
|
|
|
Записан
|
Посторонним просьба не беспокоить! ------------------------------------------------- O (I) Rh +
|
|
|
roalang
Интересующийся
Offline
|
|
« Ответ #15 : 15-06-2009 15:57 » |
|
Подскажите какую среду мне лучше спользовать, я использую Turbo C++ 3 версия. Но других у меня нет.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #16 : 15-06-2009 16:10 » |
|
Если уж есть возможность выбрать среду, то можно начинать сразу с хорошего Microsoft Visual Studio, доступна бесплатная версия для учебных целей, Express. Итого, Visual Studio 2008 Express (Если точнее, устанавливать надо Visual C++). Можно и другие попробовать, но для начала вполне подойдёт эта.
|
|
« Последнее редактирование: 15-06-2009 16:13 от Вад »
|
Записан
|
|
|
|
roalang
Интересующийся
Offline
|
|
« Ответ #17 : 29-06-2009 06:18 » |
|
При компиляции возникает ошибка: fatal error C1083: Не удается открыть файл include: iostream.h: No such file or directory
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #18 : 29-06-2009 07:59 » |
|
Потому что в новых версиях библиотеки (ну как новых, уже много лет как) этот заголовок носит имя "iostream", без ".h". Надо #include <iostream>
|
|
|
Записан
|
|
|
|
roalang
Интересующийся
Offline
|
|
« Ответ #19 : 30-06-2009 08:37 » |
|
Вчера весь вечер сидела над этой ошибкой, пробовала менять как сказали. person.cpp(10) : error C2511: Person::Person(int,char *,int,double): перегруженная функция-член не найдена в 'Person' person.h(4): см. объявление 'Person' person.cpp(50) : fatal error C1004: непредвиденное обнаружение конца файла
Вот такие ошибки возникли.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #20 : 30-06-2009 08:40 » |
|
ну, значит, надо такую функцию добавить в класс, она там есть или нет ?
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #21 : 30-06-2009 13:44 » |
|
Алексей1153++, если код не изменился, то Person(int,char *,int,double), это конструктор.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 30-06-2009 14:39 » |
|
это неважно ) Главное, чобы было. Компилятор же просто так не станет паниковать ?
|
|
|
Записан
|
|
|
|
roalang
Интересующийся
Offline
|
|
« Ответ #23 : 01-07-2009 05:29 » |
|
Да есть у меня конструктор //конструктор объекта, аргументы инициализируют все данные объекта Person(int number, char* fio, int man_woman, double age);
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #24 : 01-07-2009 06:36 » |
|
roalang, он же тебе говорит, посмотри в person.h, что там у тебя с строчке номер 17 стоит? А? зы Хотя я знаю ответ, но сказать его пока не могу.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
McZim
|
|
« Ответ #25 : 01-07-2009 14:34 » |
|
Я нашел только там не 17 строка Ключевое слово для поиска: Конструктор.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #26 : 01-07-2009 17:57 » |
|
Не, Макс, дело не в конструкторе.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
sss
Специалист
Offline
|
|
« Ответ #27 : 02-07-2009 02:33 » |
|
Может хватит издеваться над человеком? roalang, в глаза сразу бросается неправильный комментарий \\создаю второй класс, который должен выводить данные, я могла ввести данные
Синтаксические ошибки в заголовочных файлах сильно сбивают с толку,
|
|
|
Записан
|
while (8==8)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #28 : 02-07-2009 07:26 » |
|
sss, кто над кем издевается?
"Дорогие ученые. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит" (с) Стругацкие "ПНВС"
Как можно искать пропущеную или лишнюю скобку или точку с запятой не имея кода перед глазами? Актуального кода, а не того что был раньше. Хотя если кому-то телепатические способности позволяют... Тады ой.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
sss
Специалист
Offline
|
|
« Ответ #29 : 03-07-2009 02:35 » |
|
Джон, судя по ошибке именно то место... Хотя что-то реципиент растворился.
|
|
|
Записан
|
while (8==8)
|
|
|
|