Классы В C++

Тема в разделе "C/C++/C#", создана пользователем 203, 20 май 2012.

  1. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Посмотрите в сообщение №7 пожалуйста.

    Здравствуйте. У меня тут такая проблема надо решить задачу Безымянный.jpg но я не могу понять как её решить. Тема называется Явные конструкторы и деструкторы.
    Раньше я решил задачу похожую на эту Безымянный1.jpg но только тут 1 объект, а в задаче вверху их нужно 2. Подскажите как будет правильнее написать программу с уже 2 объектами.
    Вот код 2 задачи с 1 объектом.
    Код (C++):
    #include <iostream>
    #include "conio.h"
    using namespace std;

    class ZNAK
    {private:  
    char * fam;
    char * name;
    char * znak;

    public:      
    int data[3];
    void setfam(char * fam1);//прототип метода setfam
    void setname(char * name1);//прототип метода setname
    char * getfam()const;// прототип метода getfam
    char * getname()const;// прототип метода getname
    void setznak(char * znak1);//прототип метода setznak
    char * getznak()const;// прототип метода getznak
    void setdata();//прототип метода setdata
    int * getdata()const;// прототип метода getdata
    }; // !!! В конце описания класса обязательно пишется;

    // Определение функции-члена (метода) setfam класса avto
    void ZNAK::setfam(char * fam1)
    {  
    fam=fam1;
    }

    // Определение функции-члена (метода) getfam класса avto
    char * ZNAK:: getfam()const
    {  
    return fam;
    }
    // Определение функции-члена (метода) setname класса avto

    void ZNAK::setname(char * name1)
    {  
    name=name1;
    }
    char * ZNAK:: getname()const
    {  
    return name;
    }
    //name
    void ZNAK::setznak(char * znak1)
    {  
    znak=znak1;
    }

    // Определение функции-члена (метода) getznak класса avto
    char * ZNAK:: getznak()const
    {  
    return znak;
    }
    //знак
    void ZNAK::setdata()
    {  
    cout << "день рождения[день месяц год]:";
    cin>>data[0]>>data[1]>>data[2];
    }

    // Определение функции-члена (метода) getznak класса avto


    int main()
    {   setlocale( LC_ALL,"Russian" );
    ZNAK Z; // срабатывает неявный конструктор класса ZNAK
    char m[20];
    char n[15];
    char z[20];
    cout<<"----------Ввод----------"<<endl;
    cout << "Фамилия: ";
    cin >> m;
    Z.setfam(m);    // вызывается функция-член setfam
    cout << "Имя: ";
    cin >> n;
    Z.setname(n);
    cout<<"----------\n";cout<<"oven\ntelec\nblizneci\nrak\nlev\ndeva\nvesi\nskorpion\nstrelec\nkozerog\nvodolei\nriba"<<endl; cout<<"----------\n";
    cout << "знак Зодиака: ";
    cin >> z;
    Z.setznak(z);
    Z.setdata();

    cout<<"----------Вывод----------"<<endl;
    cout<<"Фамилия: "<<Z.getfam()<<endl;// вызывается функция-член getfam
    cout<<"Имя: "<<Z.getname()<<endl;// вызывается функция-член getname
    cout<<"знак Зодиака: "<<Z.getznak()<<endl;// вызывается функция-член getznak
    cout<<"день рождения[день месяц год]: "<<Z.data[0]<<" "<<Z.data[1]<<" "<<Z.data[2]<<endl;// вызывается функция-член getdata


    getch();
    return 0;
    }
    Заранее спасибо.
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (C++):
     
    //
    int main()
    {   setlocale( LC_ALL,"Russian" );
    ZNAK Z1,Z2; // срабатывает неявный конструктор класса ZNAK
    char m[20];
    char n[15];
    char z[20];
    cout<<"----------Ввод----------"<<endl;
    cout << "Фамилия: ";
    cin >> m;
    Z1.setfam(m);   // вызывается функция-член setfam
    cout << "Имя: ";
    cin >> n;
    Z1.setname(n);
    cout<<"----------\n";cout<<"oven\ntelec\nblizneci\nrak\nlev\ndeva\nvesi\nskorpion\nstrelec\nkozerog\nvodolei\nriba"<<endl; cout<<"----------\n";
    cout << "знак Зодиака: ";
    cin >> z;
    Z1.setznak(z);
    Z1.setdata();
    cout << "Фамилия: ";
    cin >> m;
    Z2.setfam(m);   // вызывается функция-член setfam
    cout << "Имя: ";
    cin >> n;
    Z2.setname(n);
    cout<<"----------\n";cout<<"oven\ntelec\nblizneci\nrak\nlev\ndeva\nvesi\nskorpion\nstrelec\nkozerog\nvodolei\nriba"<<endl; cout<<"----------\n";
    cout << "знак Зодиака: ";
    cin >> z;
    Z2.setznak(z);
    Z2.setdata();



    cout<<"----------Вывод----------"<<endl;
    cout<<"Фамилия: "<<Z1.getfam()<<endl;// вызывается функция-член getfam
    cout<<"Имя: "<<Z1.getname()<<endl;// вызывается функция-член getname
    cout<<"знак Зодиака: "<<Z1.getznak()<<endl;// вызывается функция-член getznak
    cout<<"день рождения[день месяц год]: "<<Z1.data[0]<<" "<<Z1.data[1]<<" "<<Z1.data[2]<<endl;// вызывается функция-член getdata

    cout<<"Фамилия: "<<Z2.getfam()<<endl;// вызывается функция-член getfam
    cout<<"Имя: "<<Z2.getname()<<endl;// вызывается функция-член getname
    cout<<"знак Зодиака: "<<Z2.getznak()<<endl;// вызывается функция-член getznak
    cout<<"день рождения[день месяц год]: "<<Z2.data[0]<<" "<<Z2.data[1]<<" "<<Z2.data[2]<<endl;// вызывается функция-член getdata



    getch();
    return 0;
    }
    //
    ну и судя по теме тебе ещё надо свои конструктор и деструктор написать
     
  3. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Спасибо большое за код.
     
  4. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Подскажите что можно написать в конструкторе, 1-вый я оставлю пустым, а во 2-ом нужно что то полезное написать. Подскажите пожалуйста.
    Вот это
    Код (C++):
    29. avto::~avto()
    30. {
    31. cout<<"Object Destroy"<<endl;
    32. }
    я вставил в деструктор.
     
  5. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    вот конструктор и конструктор копирования
    Код (C++):
     
    //  
    ZNAK()
    {
    fam=0;
    name=0;
    znak=0;
    data[0]=data[1]=data[2]=0;
    }
    ZNAK(ZNAK &A)
    {
    for(int i=0;i<3;i++)
    data[i]=A.data[i];
    fam=A.fam;
    name=A.name;
    znak=A.znak;
    }
    //
    можешь сделать ещё конструктор с параметром (например сразу передавать фамилию)
     
  6. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Спасибо большое за помощь.
     
  7. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Я хочу спросить ещё 1 вопрос уже по теме Массив структур. Надо решить задачу Посмотреть вложение 5116 .
    У меня есть код похожей задачи только в коде сортировка по фамилии а мне нужно по дате. Подскажите как это можно сделать заранее спасибо.
    Код (C++):
    #include "iostream"
    #include "time.h"
    #include "conio.h"

    using namespace std;

    struct ZNAK
    {
    char family[15];
    char name[15];
    char znak[11];
    int date[3];
    };

    bool chars(char* char1, char* char2, char* char3, char* char4)
    {
    int count = 0;
    int sovpad = 0;
    while (char1[count] != '\0')
    {
    if (char1[count] == char2[count])      
    ++sovpad;      
    ++count;
    }
    while (char3[count] != '\0')
    {
    if (char3[count] == char4[count])      
    ++sovpad;      
    ++count;
    }

    if (count == sovpad)
    return true;

    return false;
    }

    void Search(ZNAK *pZNAK, char* family, char* name, int n)
    {
    bool ok = false;
    for (int i = 0; i < n; ++i)
    {      
    if (chars(pZNAK[i].family, family, pZNAK[i].name, name))
    {
    cout << "Family: " << pZNAK[i].family << endl;
    cout << "name: " << pZNAK[i].name << endl;
    cout << "ZNAK: " << pZNAK[i].znak << endl;
    cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1] << ":" << pZNAK[i].date[2] << endl;
    ok = true;
    }
    }
    if (!ok)
    cout << "Family ne naydena!!!!" << endl;   
    }
    /* сортировка по фамилии
    void Sort(ZNAK *pZNAK, int n)
    {
    // A - 65
    // z - 122
    ZNAK f;
    for (int i = 0; i < n - 1; ++i)
    {
    for (int j = i; j < n; ++j)
    {
    bool h = true;
    int q = 0; 
    while (h == true && q < 16)
    {
    if (pZNAK[j].family[q] < pZNAK[i].family[q])
    {
    h=false;
    f = pZNAK[i];
    pZNAK[i] = pZNAK[j];
    pZNAK[j] = f;              
    }
    else if (pZNAK[j].family[q] > pZNAK[i].family[q])
    h = false;         

    ++q;
    }
    }
    }
    }
    */

    int main()
    {
    int n;
    ZNAK pZNAK[10];
    cout << "Vvedite N (n <= 10): ";
    cin >> n;
    if (n > 10)
    {
    cout << "Error: N" << endl;
    return 0;
    }
    for (int i = 0; i < n; ++i)
    {              
    cout << "Number " << i << endl;
    cout << "Vvedite Family -> ";
    cin >> pZNAK[i].family;
    cout << "Vvedite name -> ";
    cin >> pZNAK[i].name;
    cout << "Vvedite Znak -> ";
    cin >> pZNAK[i].znak;
    cout << "Vvedite date[format: den', mesyac, god] -> ";
    cin >> pZNAK[i].date[0] >> pZNAK[i].date[1] >> pZNAK[i].date[2];
    }
    char family[15];
    char name[15];
    cout << "Vvedite family dly poiska: ";
    cin >> family;
    cout << "<<<<<SEARCH RESULT>>>>>" << endl;
    Search(&pZNAK[0], &family[0], &name[0], n);
    Sort(&pZNAK[0], n);
    cout << "<<<<<SORT RESULT>>>>>" << endl;
    for (int i = 0; i < n; ++i)
    {
    cout << "Family: " << pZNAK[i].family << endl;
    cout << "ZNAK: " << pZNAK[i].znak << endl;
    cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1] << ":" << pZNAK[i].date[2] << endl;
    cout << "________________________________________________" << endl;
    }  
    getch();
    return 0;
    }
     
  8. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Эта сортировка неправильная
    Код (C++):
    /* сортировка по фамилии
    void Sort(ZNAK *pZNAK, int n)
    {
    // A - 65
    // z - 122
    ZNAK f;
    for (int i = 0; i < n - 1; ++i)
    {
    for (int j = i; j < n; ++j)
    {
    bool h = true;
    int q = 0; 
    while (h == true && q < 16)
    {
    if (pZNAK[j].family[q] < pZNAK[i].family[q])
    {
    h=false;
    f = pZNAK[i];
    pZNAK[i] = pZNAK[j];
    pZNAK[j] = f;              
    }
    else if (pZNAK[j].family[q] > pZNAK[i].family[q])
    h = false;         

    ++q;
    }
    }
    }
    }
    */
     
  9. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    тебе нужно 3 функции:

    1.любаю сортировка(вместо обычного массива - передаёшь массив стуктур)
    2.сравнение 2 структур (по дате: сначала по годам,если = по месяцам,если = по дням)
    3.обмен 2 структур местами(в массиве структур)
     
  10. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Оказывается в программе не работает ещё и поиск пишет всегда таких нет, в чём ошибка? И сортировка почему то у меня не сортирует хотя программа компилируется.
     
  11. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Ненужно я всё сделал.
     
  12. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Можете пожалуйста ещё 1 код глянуть, вот условие 10052012419.jpg я написал код но если честно написал ерунду вот посмотрите пожалуйста заранее спасибо.
    Код (C++):
    #include "iostream"
    #include "conio.h"
    using namespace std;

    class Ghislo{
    public:
    Ghislo(int x, int y): a(x), b(y){cin>>a; cin>>b;}
    ~Ghislo();
    void SetA(int x){x=a;}
    void SetB(int y){y=b;}
    void SetA(){--a;}
    void SetB(){--b;}
    void out(){cout<<a<<"+"<<b<<"i"<<endl;}
    private:
    int a;
    int b;};

    Ghislo::~Ghislo()
    {cout<<"Object Destroyed"<<endl;}
    int main()
    {  Ghislo G(0,0);
    G.SetA();
    G.SetB();
    G.out();
    G.~Ghislo();
    getch();
    return 0;
    }
     
Загрузка...
Похожие Темы - Классы C++
  1. BashOrgRu
    Ответов:
    6
    Просмотров:
    4.146
  2. Azgor
    Ответов:
    2
    Просмотров:
    1.676
  3. vladis222
    Ответов:
    4
    Просмотров:
    1.650
  4. VladSh
    Ответов:
    22
    Просмотров:
    7.204
  5. slavon-x86
    Ответов:
    1
    Просмотров:
    3.028

Поделиться этой страницей