Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Создание и сортировка массива классов


Автор: NFL 5.5.2009, 11:11
Код

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <cstring>
#include <iomanip>

class myclass
{
    char sport[10];
    int uch;
    double pts;
    char fwin[10];
public:
    void getdata(char sport1[10], int uch1, char fwin1[10], double pts1)
    {
        strcpy(sport, sport1);
        uch=uch1;
        strcpy(fwin, fwin1);
        pts=pts1;
    }
        void showdata()
    {
        cout << setw(15) << sport << setw(3) << uch << setw(10) << fwin 
            << setw (5) << points;
    }
};


Компилятор ругается на
Код

strcpy(sport, sport1);


h:\documents and settings\admin\мои документы\visual studio 2005\projects\cl_laba\cl_laba\cl_laba.cpp(16) : warning C4996: 'strcpy' was declared deprecated
        h:\program files\microsoft visual studio 8\vc\include\string.h(73) : see declaration of 'strcpy'

(MS Visual Studio 2005)

В чем тут проблема???

И еще.... Нужно с этим классом создать массив классов, и его отсортировать по заданному полю... 

Надеюсь на помощь smile 

Автор: azesmcar 5.5.2009, 11:29
NFL

Во первых - это не ошибка а варнинг.
Во вторых - в ней все сказано smile функция strcpy устарела smile 
дурацкии варнинги студии, можете заменить на strcpy_s, но это нестандартная функция. Можно отключить эти варнинги если сильно нервирует
Код

#pragma warning(disable:4996)

Автор: zim22 5.5.2009, 11:53
Цитата(NFL @  5.5.2009,  11:11 Найти цитируемый пост)
Нужно с этим классом создать массив классов,

Код

myclass array[256]; // создал

Цитата(NFL @  5.5.2009,  11:11 Найти цитируемый пост)
 и его отсортировать по заданному полю...

функция std::sort из <algorithm> c функтором в качестве третьего параметра подойдёт. 

Автор: NFL 5.5.2009, 11:59
Цитата(zim22 @  5.5.2009,  11:53 Найти цитируемый пост)
функция std::sort из <algorithm>

Слишком сильно для студента первого курса smile 

А strcpy_s, пробовал, но тоже какие то ошибки, типа "не хватает 2х аргументов"


Цитата(zim22 @  5.5.2009,  11:53 Найти цитируемый пост)
myclass array[256]; // создал



Обращаться, я так понимаю, через точку к полям? smile 

ЗЫ: И сортировку можно прямо в main делать?

Автор: NFL 5.5.2009, 12:47
Код

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <cstring>
#include <iomanip>
#pragma warning(disable:4996)
#define n 3
class myclass
{
    char sport[10];
    int uch;
    double pts;
    char fwin[10];
public:
    void getdata(char sport1[10], int uch1, char fwin1[10], double pts1)
    {
        strcpy(sport, sport1);
        uch=uch1;
        strcpy(fwin, fwin1);
        pts=pts1;
    }
        void showdata()
    {
        cout << setw(15) << sport << setw(3) << uch << setw(10) << fwin 
            << setw (5) << pts << endl;
    }
};

int main()
{
    myclass t[n];
    int cu;
    char sp[10], fp[10];
    double pt;
    for (int i=0;i<n;i++)
    {
        cout << "Vvedite sport\n";
        cin >> sp;
        cout << "vvedite kol. uchastnikov\n";
        cin >> cu;
        cout << "Vvedite familiyu pobeditelya\n";
        cin >> fp;
        cout << "Vvedite ochki\n";
        cin >> pt;
        t[i].getdata(sp, cu, fp, pt);
    }
    for (int i=0;i<n;i++)
    {
        t[i].showdata();
    }
    system ("pause");
    return 0;
}


Это все дело работает на УРА smile 

Подскажите, пжл, еще - как сделать сортировку массива myclass t[n] по полю uch???

Желательно с использованием массива указателей, но буду благодарен за любой вариант smile 

Автор: Cheloveck 5.5.2009, 12:51
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%A8%D0%B5%D0%BB%D0%BB%D0%B0
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B0%D0%BC%D0%B8
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D0%BC
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%88%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82%D0%BE%D0%BC
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D1%83%D0%B7%D1%8B%D1%80%D1%8C%D0%BA%D0%BE%D0%BC

Это наиболее популярные алгоритмы сортировки массива. Чтобы ими воспользоваться тебе нужно у себя в классе перегрузить операторы > и/или <. 

P.S. Если шаблон студенту первого курса не подходит, то пусть сортирует как все))))

Автор: NFL 5.5.2009, 15:37
Cheloveck, мне то подходит, а преподу - НЕД)))

Сортировки эти все я знаю - я спрашиваю, как передать в функцию массив классов=)
Ну ща шо нить прокурю)))

Автор: zim22 5.5.2009, 15:58
Цитата(NFL @  5.5.2009,  15:37 Найти цитируемый пост)
я спрашиваю, как передать в функцию массив классов=)

Код

void fcn(myclass *arr) { }
myclass arr[256];
fcn(arr);

Автор: gosn1ck 6.5.2009, 20:30
Цитата(NFL @ 5.5.2009,  15:37)
как передать в функцию массив классов=)

эти типы не абстрактные, они столь же реальны, как int и float  smile 

Автор: Cheloveck 7.5.2009, 07:56
Имя массива есть указатель на его первый элемент, передавай указатель.

Добавлено через 1 минуту и 14 секунд
Цитата

как передать в функцию массив классов=)

И не "массив классов", а массив объектов  класса o_O

Автор: azesmcar 7.5.2009, 08:37
Цитата

Имя массива есть указатель на его первый элемент, передавай указатель.

Константный указатель - если быть точным (по стандарту имя массива - rvalue)
Цитата

An lvalue or rvalue of type “array ofN T” or “array of unknown bound of T” can be converted to an rvalue
of type “pointer to T.” The result is a pointer to the first element of the array.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)