Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 20:22   #1
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию friend в шаблоне

Приветствую.
Возникла проблема с friend-функцией шаблона.
Ниже описан код программы.
Заранее благодарен.

Код:
template <class T>
class Bank
{
	T money;
public:
	friend int sum(Bank&);
	Bank() {}
	Bank(T m): money(m) {}
	~Bank() {}
};

template <typename T>
T sum(Bank <T> &m)
{	return (T)m.money;}


int _tmain(int argc, _TCHAR* argv[])
{
	...
	long int summa, su;
	cout << "Введите сумму в банке: ";
	cin >> summa;
	Bank <long int> bank(summa);
           cin >> su;
	if(sum(bank)!=su)                       //Error
	    system("pause");
	...
}
Blind Guard вне форума Ответить с цитированием
Старый 17.12.2012, 22:38   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
#include<iostream>
#include<vector>

using namespace  std;

template <class T>class Bank;
template < class T> T sum(Bank<T> &m){return m.money;}

template <class T>
class Bank
{
    T money;
public:
    friend T sum<T>(Bank&);
    Bank() {}
    Bank(T m): money(m) {}
    ~Bank() {}
};


void Examle(const long int summa, const long int su)
{
    Bank <long int> bank(summa);

    const long int money_in_bank = sum(bank);

    if(money_in_bank!=su)  cout<<"error\n";
    else { cout << "all right\n"; }
}

int main()
{
    Examle(100,100);
    Examle(1000,100);
   return 0;
}
Вывод в консоль:

Код:
all right
error
_Bers вне форума Ответить с цитированием
Старый 17.12.2012, 22:55   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

или вот так:

Код:
#include<iostream>
using namespace  std;

template <class T>class Bank
{
    T money;
public:
    template<class U> friend U sum(Bank<U>&);
    Bank() {}
    Bank(T m): money(m) {}
    ~Bank() {}
};

template <class T> T sum(Bank<T> &m){return m.money;}


void Examle(const long int summa, const long int su)
{
    Bank <long int> bank(summa);

    const long int money_in_bank = sum(bank);

    if(money_in_bank!=su)  cout<<"error\n";
    else { cout << "all right\n"; }
}

int main()
{
    Examle(100,100);
    Examle(1000,100);
   return 0;
}
_Bers вне форума Ответить с цитированием
Старый 17.12.2012, 23:31   #4
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Cпасибо, помогло.
Как только смогу сразу же +сану репу
Blind Guard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
friend template Dmitry333 Общие вопросы C/C++ 1 05.10.2012 10:58
friend function (c++) zhenya.ya Помощь студентам 6 01.10.2010 10:04
разбиение на friend классы zhenya.ya Общие вопросы C/C++ 4 30.09.2010 23:50
friend функция в clr Lazio Общие вопросы C/C++ 5 27.02.2010 23:13