Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с классом. Правильно ли я выполнил задание? 
:(
    Опции темы
Atij
Дата 19.5.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Добрый день =)

Возможно странный вопрос, но тем не менее, помогите пожалуйста понять, правильно ли я выполнил задание, вот условие:


Напишите класс Time. Создайте конструктор, который может использовать текущее время, возвращаемое функцией time() - объявленной в заголовочном файле time.h стандартной библиотеки языка С - для инициализации объекта класса Time. Напишите программу для тестирования класса Time, с выводом на экран значений Time в реальном времени. 


Вот то что я сделал, всё работает:

Код


#include <time.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>

class Time{
public: 
Time (char*);
void SetTime(char*);
char* GetTime() const;
private:
char *time2;
};

Time::Time(char* time1)
{SetTime (time1); }

void Time::SetTime(char* time1)
{time2 = time1; }

char* Time::GetTime() const
{return time2; }

void main()
{
clrscr();

long ltime;
char *k,*time1;
time(&ltime);
k=ctime(&ltime);
k+=11;
strncpy(time1,k,8);
*(time1+8)='\0';

Time presentTime(time1);
cout<<"Present Time: "<<presentTime.GetTime()<<endl;
getch();
}



Спасибо=)



PM MAIL   Вверх
bronislav
Дата 19.5.2008, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Ну для начала не забывай выставлять отступы в коде, а то читать трудно, а на счет класса посмотрю.

И советую разносить описание класса и его реализацию в разные файлы


Это сообщение отредактировал(а) bronislav - 19.5.2008, 19:02


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
ama_kid
Дата 19.5.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Atij
1) Сомневаюсь, что твой класс будет "выводить на экран значение Time в реальном времени". Для проверки - просто сделай паузу перед выводом значения... Он будет выводить только то время, которое было на момент создания экземпляра...
2) Всю обработку связанную с преобразованием строка\время и обратно лучше занести внутрь класса.
3) Память под указатель для строкового представления времени желательно выделять\освобождать внутри класса.

Ну и читабельность кода, конечно, оставляет желать лучшего, имена переменных малоинформативны. Но это уже мелкие придирки  smile 

Это сообщение отредактировал(а) ama_kid - 19.5.2008, 19:12


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
anatox91
Дата 19.5.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



Atij, можно вынести и описание класса, и нужные заголовочные файлы в другой хедер, в .срр файл с таким же именем вынести реализацию, и потом например в main.cpp включить этот единственный хедер и использовать класс  smile 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Atij
Дата 19.5.2008, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Всем спасибо.
Цитата

Сомневаюсь, что твой класс будет "выводить на экран значение Time в реальном времени". Для проверки - просто сделай паузу перед выводом значения... Он будет выводить только то время, которое было на момент создания экземпляра...

Не подскажите как это исправить?
Цитата

Память под указатель для строкового представления времени желательно выделять\освобождать внутри класса.

Так норм?
Код

~Time() {delete time2;}


И ещё кое что, вопрос не сложный, не хочу новый топ открывать, вы не подскажите как здесь:

Код

#include<iostream.h>
#include<conio.h>

struct customer
{

char lastName[15];
char firstName[15];
int customernumber;

    struct
    {
    char phoneNumber[11];
    char adress[50];
    char city[15];
    char state[3];
    char index[6];
    } personal;

} customerRecord, *customerPtr;


void main()

{

int n,i;
char s='y';
char *Name;
while(s=='y')
{
clrscr();

customerPtr = &customerRecord;

cout<<"Pleas enter count of lastname`s: ";
cin>>n;

for (i=1;i<=n;i++){
    cout<<endl<<"Pleas enter order lastname: ";
    cin>>*Name;
    (*customerPtr).lastName[i]=*Name;
    }
cout<<endl;
for (i=1;i<=n;i++){
cout<<endl<<"(*customerPtr).last name["<<i<<"]:"<<(*customerPtr).lastName[i]<<endl;
cout<<"customerPtr->last name["<<i<<"]:"<<(*customerPtr).lastName[i]<<endl;
}

cout<<endl<<"would you like to continue? y/n: "<<endl;
cin>>s;

}


}



сделать так чтобы lastName получал набор символов, не изменяя при этом структуру класса.

Я знаю что совсем обнаглел, но тем не менье, здесь:
http://forum.vingrad.ru/forum/topic-212000.html
описанна практическе таже проблема связанная со строками, не могли бы вы помочь? Большое всем ещё раз спасибо=)

PM MAIL   Вверх
mes
Дата 20.5.2008, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Atij @  19.5.2008,  19:55 Найти цитируемый пост)
сделать так чтобы lastName 

вместо 
Код

for (i=1;i<=n;i++){
    cout<<endl<<"Pleas enter order lastname: ";
    cin>>*Name;
    (*customerPtr).lastName[i]=*Name;
    }

так 
Код

    cout<<endl<<"Pleas enter order lastname: ";
    cin>>Name;
    (*customerPtr).lastName[i]=*Name;


P.S. зачем ты приводишж к указателю, чтоб потом разыменовывать??
Код

customerPtr = &customerRecord;
  (*customerPtr).



--------------------
PM MAIL WWW   Вверх
Atij
Дата 20.5.2008, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Цитата

P.S. зачем ты приводишж к указателю, чтоб потом разыменовывать??код C++

Код

customerPtr = &customerRecord;
(*customerPtr).




я не разыменовываю, я образаюсь к элементам структуры=) навреное... =)
PM MAIL   Вверх
mes
Дата 20.5.2008, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Код

struct test
{
   int a;
} ;

test o, // объект на стеке
      *p;  // указатель типа p

// p= new test; // создание объекта и запоминание его адреса в p;

p=&o;  // связывание - указатель получает адрес объекта

// обрашения к членам структуры / класса :
p->a =1;  //  через указатель 
o.a =2;     //  по ссылке
(*p).a =3; // по ссылке разыменовав указатель // используется реже из за неудобства использования
// все три вызова аналогичны.


Добавлено @ 02:21
вот пример для твоего кода - убрал лишнее :
Код

struct Customer
{ ...
} customer;
...
char *name;
...
customer.lastName = *name;


Это сообщение отредактировал(а) mes - 20.5.2008, 02:22


--------------------
PM MAIL WWW   Вверх
Atij
Дата 23.5.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Цитата

 cout<<endl<<"Pleas enter order lastname: ";
    cin>>Name;
    (*customerPtr).lastName[i]=*Name;

так, выводит тока первый символ очередного имени, а потом вылетает из компилятора =(
PM MAIL   Вверх
mes
Дата 23.5.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Atij @  23.5.2008,  14:05 Найти цитируемый пост)
а потом вылетает из компилятора

как это вылетает из компилятора? наверно подразумевалось что просто вылетает...

Цитата(Atij @  23.5.2008,  14:05 Найти цитируемый пост)
так, выводит тока первый символ очередного имени, 

так скорей всего память не выделена  под  Name


--------------------
PM MAIL WWW   Вверх
Atij
Дата 23.5.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Код

char lastName[15];
char firstName[15];

А такая конструкция предусматривает прсваивание строки lastName. Если да, то как это сделать, почему не работает мой пример?
PM MAIL   Вверх
mes
Дата 23.5.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Atij @  23.5.2008,  14:39 Найти цитируемый пост)
А такая конструкция предусматривает прсваивание строки lastName

имеется ввиду наверно не присваивание а выделение места. 
Да, для char lastName[15] - выделяется 15 байт с индексом от 0 до 14

Это сообщение отредактировал(а) mes - 23.5.2008, 15:03


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1004 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.