1 Востаннє редагувалося Kiriago (26.02.2018 19:13:57)

Тема: Класи,поможіть будь ласка

Маю я значить наступне завдання:
Розробити класи ДАТА (день, місяць, рік) та ЧАС (година, хвилина, секунда). Визначити конструктори ініціалізації, копіювання, деструктори та методи для зміни і читання значень полів розроблених класів. Cтворити клас ПЕРЕДАЧА (ДАТА, ЧАС трансляції, вид та назва передачі). Визначити необхідні дані, методи, конструктори та деструктори, методи введення-виведення. У межах ієрархії класів побудувати поліморфічний кластер на основі перевизначеного методу виведення часу (або дати) та назви передачі. Продемонструвати механізм динамічного зв'язування. Розробити клас ПРОГРАМА ПЕРЕДАЧ, що містить список об'єктів класу ПЕРЕДАЧА. Виконати пошук передачі за її назвою. Для роботи з масивом об'єктів використати LinkedList та клас-ітератор.

З класами дата та час все зрозуміло, проте я не можу зрозуміти решти завдання, підкажіть будь-ласка як виконати решту завдання, ось код який я написав до перших двох класів:

#include "stdafx.h"
#include <iostream>

using namespace std;

class Time {
private: int hour, minute, second;
public:
    Time(int Hours, int Minutes, int Seconds) 
    {
        setTime(Hours, Minutes, Seconds);
    }
    
    void setTime(int Hours, int Minutes, int Seconds) {
        hour = Hours;
        minute = Minutes;
        second = Seconds;
    }
    void getTime() {
        cout << "Time : " << hour << "." << minute << "." << second << endl;
    }
    ~Time(){}
    Time() = default;
};

class Date 
{
private: int day, month, year;
public:
    Date(int date_day, int date_month, int date_year) 
    {
        setDate(date_day, date_month, date_year);
    }
    void setDate(int date_day, int date_month, int date_year) {
        day = date_day;
        month = date_month;
        year = date_year;
    }
    void getDate() {
        cout << "Date : " << day << "." << month << "." << year << endl;;
    }
    ~Date(){}
    Date() = default;
};

int main() {
    int day, month, year;
    int hour, second, minute;
    Date objDate;
    Time objTime;

    cout << "Enter the current date" << endl;
    cout << "Day : "; cin >> day;
    cout << "Month : "; cin >> month;
    cout << "Year : "; cin >> year;

    cout << "Enter the current time" << endl;
    cout << "Hour : "; cin >> hour;
    cout << "Minute : "; cin >> minute;
    cout << "Second : "; cin >> second;
    
    objDate.setDate(day,month,year);
    objTime.setTime(hour, minute, second);
    objDate.getDate();
    objTime.getTime();
}

2

Re: Класи,поможіть будь ласка

Kiriago написав:

Розробити класи ДАТА (день, місяць, рік) та ЧАС (година, хвилина, секунда).

Є

Kiriago написав:

Визначити конструктори ініціалізації, копіювання, деструктори та методи для зміни і читання значень полів розроблених класів.

Де виділене?

Kiriago написав:

Cтворити клас ПЕРЕДАЧА (ДАТА, ЧАС трансляції, вид та назва передачі). Визначити необхідні дані, методи, конструктори та деструктори, методи введення-виведення.

Де?

Kiriago написав:

У межах ієрархії класів побудувати поліморфічний кластер на основі перевизначеного методу виведення часу (або дати) та назви передачі. Продемонструвати механізм динамічного зв'язування.

Не знаю, нащо так умову закрутили - мабуть, у викладача якісь комплекси з часів навчання. Вам треба визначити класи-нащадки передачі і одного з перших двох класів із заміною згаданих методів, і продемонструвати, як це працює. Якщо маєте проблеми із поліморфізмом - читайте підручник.

Подякували: Kiriago, Fox, FakiNyan4

3 Востаннє редагувалося Kiriago (28.02.2018 21:13:33)

Re: Класи,поможіть будь ласка

Дякую

4 Востаннє редагувалося Kiriago (01.03.2018 16:33:37)

Re: Класи,поможіть будь ласка

Гляньте будь ласка, чи правильно виконав...

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class Time {
protected: int hour, minute, second;
public:
    Time() {}
    Time(int Hours, int Minutes, int Seconds)
    {
        setTime(Hours, Minutes, Seconds);
    }
    Time(const Time &obj) {}
    void setTime(int Hours, int Minutes, int Seconds) {
        hour = Hours;
        minute = Minutes;
        second = Seconds;
    }
    void getTime() {
        cout << "Time : " << hour << "." << minute << "." << second << endl;
    }
    ~Time() {}
};

class Date
{
protected: int day, month, year;
public:

    Date() {}
    Date(int date_day, int date_month, int date_year)
    {
        setDate(date_day, date_month, date_year);
    }
    Date(const Date&obj) {}
    void setDate(int date_day, int date_month, int date_year) {
        day = date_day;
        month = date_month;
        year = date_year;
    }
    void getDate() {
        cout << "Date : " << day << "." << month << "." << year << endl;
    }
    ~Date() {}

};

class Transfer : public Date, public Time {

protected: string type, name;
public:

    void setTransfer(string Typeof, string Nameof) {
        type = Typeof;
        name = Nameof;
    }

    void getTransfer() {
        getTime();
        getDate();
        cout << "Type of transfer: " << type << endl;
        cout << "Name of transfer: " << name << endl;

    }

};

class ProgramOfTransfer : public Transfer {
private:string prog[5], looking; int day[5]; int month[5]; int year[5]; int hour[5]; int minute[5];
public:
    ProgramOfTransfer()
    {
        prog[0] = "News";
        prog[1] = "Supernational";
        prog[2] = "Naruto";
        prog[3] = "Avatar";
        prog[4] = "Bones";
    for (int i = 0; i < 5; i++) {
            day[i] = rand() % 30;
            month[i] = rand() % 12;
            year[i] = 2018;
            hour[i] = rand() % 24;
            minute[i] = 10 * (rand() % 10);
        }
    }
    void setProgram(string lookingOf) {
        looking = lookingOf;
    }
    void getProgram() {
        int i = 0;
        while( i!=5) {
            if (looking == prog[i]) {
                cout << day[i]<<"."<<month[i]<<"."<<year[i]<<"   "<<hour[i]<<":"<<minute[i]<<endl;
            } i++;
        }
    }


    ~ProgramOfTransfer() {}
};
int main() {

    int day, month, year;
    int hour, second, minute;
    string type, name, nameOflook;
    Transfer objTransf;
    ProgramOfTransfer objProgr;

    cout << "Enter the current date" << endl;
    cout << "Day : "; cin >> day;
    cout << "Month : "; cin >> month;
    cout << "Year : "; cin >> year;

    cout << "Enter the current time" << endl;
    cout << "Hour : "; cin >> hour;
    cout << "Minute : "; cin >> minute;
    cout << "Second : "; cin >> second;

    cout << "Enter the name and type of transfer" << endl;
    cout << "Name: "; cin >> name;
    cout << "Type: "; cin >> type;

    system("cls");
    objTransf.setDate(day, month, year);
    objTransf.setTime(hour, minute, second);
    objTransf.setTransfer(type, name);

    objTransf.getTransfer();

    cout << "Enter the name of Transfer that you are looking for" << endl; cin >> nameOflook;
    objProgr.setProgram(nameOflook);
    objProgr.getProgram();
}

5

Re: Класи,поможіть будь ласка

От і підросло покоління, що не знає, що таке передача і їхня програма. Та то таке.
По суті: у вас немає поліморфізму. Пояснюю на пальцях, як має працювати поліморфна програма:
https://ideone.com/tyEFIs
Клас-нащадок демонструє у віртуальних функціях поліморфну поведінку. Звичайна функція (tell_usual) дивиться на тип ВКАЗІВНИКА (Base *), а віртуальна - на тип ОБ'ЄКТА (Derived *).

Прихований текст

ну от, а я не збирався писати підручник...

Наслідування моделює відношення "Є" ("це такий ..."). Тобто в моєму випадку Derived - це такий Base, що трохи інакше обробляє функції tell і tell_usual. А у вашому випадку "програма передач - це така передача"? Не думаю. Значить, треба якось інакше їх зліпити.

6

Re: Класи,поможіть будь ласка

Отак:

    virtual void tell()    {
        cout<<__PRETTY_FUNCTION__<<endl;
    }
    void tell_usual() {
        cout<<__PRETTY_FUNCTION__<<endl;
    }

легше розмножувати класи-приклади і у виводі повні прототипи функцій.

7 Востаннє редагувалося koala (01.03.2018 23:59:17)

Re: Класи,поможіть будь ласка

...за умови, що компілятор - gcc. Що, судячи з #include "stdafx.h", зовсім не так.
В VS є __FUNCTION__, але нащо? Є стандарт, давайте його дотримуватися хоча б в поясненнях новачкам. А то доведеться ще й всі відмінності компіляторів тут розглядати.

Подякували: ReAl1

8

Re: Класи,поможіть будь ласка

koala написав:

Є стандарт, давайте його дотримуватися хоча б в поясненнях новачкам

Прийнято, не подумав. Просто онлайн-тестилки переважно gcc-шні, сам давно забув про звіринець (Avocet/HiTech/Keil/IAR/…) і часом теж забуваю, що є щось інше, такий собі gcc-шовінізм :-)