Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / применение friend функций в шаблонном классе / 20 сообщений из 20, страница 1 из 1
24.04.2013, 19:25
    #38238972
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Здравствуйте. Передо мной поставили задачу написать курсовой проект, в котором в шаблонный класс mas вносятся значения и есть метод вычисления максимального элемента массива (max).
При этом max должен быть реализован как дружественная функция, как не пытался читать rsdn, и др источники не могу понять.
класс что-то вроде такого должен быть(под рукой нет никакого компилятора):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
template <class T>
Class Mas
{
private: 
T * item;
int size;
public:
Mas(int array_size,T default_value){size=array_size;item = new T [size]; for (int i=0;i<size;i++) item[i]=default_value;}
/*не помню в данный момент съест в таком виде деструктор или после нужно описать с явным заданием что тип от шаблона, но это не важно, когда буду у ПК на котором стоит MS VS 2010 проверю */
~Mas(){size=0; delete [] item;};
//Max и должна быть friend методом, но класс 1 и более не предвидится
T Max(){T max;for (int i=0;i<size;i++) if (max<item[i]) max=item[i];return max;}


П.С. Код приведен для наглядности что мне нужно сделать и примерно как это выглядит
П.С.2 Если есть, у кого -то толковые статьи или примеры кода покажите пожалуйста, ну никак не могу понять эти дружественные методы для 1 класса=(
П.С.3 Язык С++ интересует, по возможности примеры от MS Visual Studio, но если от др то сред тоже спасибо
...
Рейтинг: 0 / 0
24.04.2013, 19:38
    #38238986
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Сессия2013При этом max должен быть реализован как дружественная функция
....никак не могу понять эти дружественные методы для 1 класса=(
Перевожу задание медленно: max не может быть методом класса, он должен быть автономной
функцией с доступом к непубличным полям класса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.04.2013, 20:05
    #38239021
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Dimitry SibiryakovСессия2013При этом max должен быть реализован как дружественная функция
....никак не могу понять эти дружественные методы для 1 класса=(
Перевожу задание медленно: max не может быть методом класса, он должен быть автономной
функцией с доступом к не публичным полям класса.

В примере который мной приведен реализации обращение едет к приватному свойству=)
Я не понимаю как записать дружественную функцию относительно 1 класса у меня это в голове не укладывается, поэтому и прошу помощи здесь=(
почитав рсдн получается должно бы получаться такое, что-то вроде такого, но насколько это правильно и как описать реализацию не понимаю=(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
template <class T>
Class Mas
{
private: 
T * item;
int size;
public:
Mas(int array_size,T default_value){size=array_size;item = new T [size]; for (int i=0;i<size;i++) item[i]=default_value;}
/*не помню в данный момент съест в таком виде деструктор или после нужно описать с явным заданием что тип от шаблона, но это не важно, когда буду у ПК на котором стоит MS VS 2010 проверю */
~Mas(){size=0; delete [] item;};
//Max и должна быть friend методом, но класс 1 и более не предвидится
friend  T Mas<T>:: Max(){T max;for (int i=0;i<size;i++) if (max<item[i]) max=item[i];return max;}
 
};
...
Рейтинг: 0 / 0
24.04.2013, 20:12
    #38239028
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Сессия2013должно бы получаться такое, что-то вроде такого
Нет, не должно. Ты упорно делаешь max методом класса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.04.2013, 21:33
    #38239105
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
2Dimitry Sibiryakov
Уважаемый, покажите пожалуйста на примере как это сделать относительно 1 шаблонного класса.
...
Рейтинг: 0 / 0
24.04.2013, 21:41
    #38239116
Южанин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Сессия20132Dimitry Sibiryakov
Уважаемый, покажите пожалуйста на примере как это сделать относительно 1 шаблонного класса.
В своём шаблонном классе обьявляешь шаблонную функцию-подружку.
...
Рейтинг: 0 / 0
24.04.2013, 21:45
    #38239118
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
ЮжанинСессия20132Dimitry Sibiryakov
Уважаемый, покажите пожалуйста на примере как это сделать относительно 1 шаблонного класса.
В своём шаблонном классе об ъ являешь шаблонную функцию-подружку.
Уважаемый я все понимаю, но не нужно дублировать мой вопрос своими словами в качестве комментария. Спасибо.
...
Рейтинг: 0 / 0
24.04.2013, 21:54
    #38239131
Южанин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Сессия2013Южанинпропущено...

В своём шаблонном классе об ъ являешь шаблонную функцию-подружку.
Уважаемый я все понимаю, но не нужно дублировать мой вопрос своими словами в качестве комментария. Спасибо.
Нет не понимаешь. Ключевое слово "об ъ являешь". Тебе уже сказали что функция не должна быть членом твоего класса.
...
Рейтинг: 0 / 0
24.04.2013, 22:43
    #38239162
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
У Да Винчи есть много разных головоломок, если тебе покажут решение, то ты поймешь быстрее , если нет, то можешь и не понять.
Ключевое слово поймешь быстрее .
П.С. Наш диалог больше походит на монолог глухого со слепым.
...
Рейтинг: 0 / 0
24.04.2013, 22:55
    #38239167
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Один из примеров почему у меня батхерт и я не понимаю. Пример с rsdn со вложенным классом.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class A {
    static int i;
public:
    template <class T> class B {
    public:
        void f() { i = 0; }
    };
    //template <class T> friend class B;
};

int A::i;

int main()
{
    A::B<int> b;
    b.f();
}


То ли я настолько туп, что не понимаю неочевидных вещей, то ли ваши комментарии не очевидны для моего понимания
...
Рейтинг: 0 / 0
24.04.2013, 22:55
    #38239168
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Сессия2013У Да Винчи есть много разных головоломок...
В переводе на русский это звучит как "дайте уже списать и не парьте мозги своими учебниками".

Держи, прямо из справки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
template <class T> class B
{
   // class declarations
};

template <class T> void func(B <T> *b)
{
    // function body
}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.04.2013, 22:57
    #38239170
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Сессия2013,

1 объяви вне класса нужную функцию.
2 объявление перемести внутрь объявления класса.
3 добавь впереди ключевое слово friend.

Всё.
...
Рейтинг: 0 / 0
25.04.2013, 01:05
    #38239235
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
MasterZivСессия2013,

1 объяви вне класса нужную функцию.
2 объявление перемести внутрь объявления класса.
3 добавь впереди ключевое слово friend.

Всё.
Получаем что-то вроде такого или опять недржит функция?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
template <class T>
Class Mas
{
//хотя я почему-то помню, что объявленные тут приватны по умолчанию
T Mas();

private: 
T * item;
int size;
public:
Mas(int array_size,T default_value){size=array_size;item = new T [size]; for (int i=0;i<size;i++) item[i]=default_value;}
/*не помню в данный момент съест в таком виде деструктор или после нужно описать с явным заданием что тип от шаблона, но это не важно, когда буду у ПК на котором стоит MS VS 2010 проверю */
~Mas(){size=0; delete [] item;};
//Max и должна быть friend методом, но класс 1 и более не предвидится
};
//вариант согласно вашего алгоритма
template <class T>
friend  T Mas<T>:: Max(){T max;for (int i=0;i<size;i++) if (max<item[i]) max=item[i];return max;}


П.С. Доступ к среде разработки будет только через пару дней
П.С.2 Не стесняйтесь цитировать и выделять тегом В, и немного описывать что не так я делаю. Чтобы и мне лишних уточняющих сообщений не плодить, и если кто-то потом наткнется, чтобы мог быстрее разобраться
П.С.3 Те кто хотят "просто списать" либо идут в соответствующие агенства/форумы/и тп и заказывают, либо тупо списывают "слово в слово"(полностью вплоть до пунктуации), по крайней мере из тех кого я знаю
...
Рейтинг: 0 / 0
25.04.2013, 01:17
    #38239240
применение friend функций в шаблонном классе
Вот онлайновая среда разработки:
http://ideone.com/sUAaCb
Вот рабочий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include<iostream>

template <class T>
class Mas
{
    //хотя я почему-то помню, что объявленные тут приватны по умолчанию
    Mas();
    
    private: 
    T * item;
    int size;
    public:
    Mas(int array_size,T default_value){size=array_size;item = new T [size]; for (int i=0;i<size;i++) item[i]=default_value;}
    /*не помню в данный момент съест в таком виде деструктор или после нужно описать с явным заданием что тип от шаблона, но это не важно, когда буду у ПК на котором стоит MS VS 2010 проверю */
    ~Mas(){size=0; delete [] item;};
    //Max и должна быть friend методом, но класс 1 и более не предвидится
    
    
    template<class T2> friend T2 Max(Mas<T2> const& m);
};

//вариант согласно вашего алгоритма
template <class T2>
T2 Max(Mas<T2> const& m) {T2 max;for (int i=0;i<m.size;i++) if (max<m.item[i]) max=m.item[i];return max;}

int main() {
    Mas<int> mas(100, 10);
    
    std::cout << Max(mas);
    
    return 0;
}
...
Рейтинг: 0 / 0
25.04.2013, 10:36
    #38239545
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Вот человек же нихрена с++ не знает, а и то всё правильно написал за пять минут.
...
Рейтинг: 0 / 0
25.04.2013, 10:38
    #38239550
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Человек, сори, что-то ты всё же знаешь в с++ ...
...
Рейтинг: 0 / 0
25.04.2013, 11:12
    #38239621
Южанин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
среда разработки, недал парню нарастить меланин.
...
Рейтинг: 0 / 0
25.04.2013, 11:37
    #38239687
Сессия2013
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Спасибо за пример наконец понял.
Уровень меланина в норме=)
...
Рейтинг: 0 / 0
25.04.2013, 11:47
    #38239709
Южанин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
применение friend функций в шаблонном классе
Сессия2013,

меланина много небывает. дерзай.
...
Рейтинг: 0 / 0
27.04.2013, 01:03
    #38242388
применение friend функций в шаблонном классе
MasterZivЧеловек, сори, что-то ты всё же знаешь в с++ ...
Да ничего, можете считать что я ничего не знаю :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / применение friend функций в шаблонном классе / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]