Форум программистов, компьютерный форум CyberForum.ru

Шаблоны - C++

Восстановить пароль Регистрация
 
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
26.07.2013, 16:40     Шаблоны #1
Есть два класса:
C++
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
33
34
35
36
#include <iostream>
#include <string>   
#include <valarray>
using namespace std;
template <class T1, class T2>
class Pair
{
private:
    T1 a;
    T2 b;
public:
    Pair(const T1 & aval, const T2 & bval);
    //Pair(int n);
    void SetPair(int n);
    Pair() {}
    void Show();
    int Sum();
    ~Pair() {}
};
class Wine
{
private:
    typedef std::valarray<int> ArrayInt;
    typedef Pair<ArrayInt, ArrayInt> PairArray;
    std::string label;
    int years;
    PairArray Pairr;
public:
    void GetBottles();
    int Sum();
    string & Label();
    void Show();
    Wine(const char * l, int y, const int yr[],const int bot[]);
    Wine(const char * l, int y);
    ~Wine () {}
};
Правильный ли вызов метода шаблонного класса?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template <class T1, class T2>
void Pair<T1,T2>::SetPair(int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<"Enter year: "<<a[i]<<endl;
        cout<<"Enter bottles for that year: "<<b[i]<<endl;
    }
}
 
template <class T1, class T2>
void Wine::GetBottles()
{
    cout<<"Enter name of wine: "<<endl;
    getline(cin,label);
    cout<<"Enter number of years: "<<years<<endl;
    cin>>years;
    cin.get();
    cout<<"Enter "<<label<<" data for "<<years<<"year(s):\n";
    Pair<ArrayInt, ArrayInt>::SetPair(years);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2013, 16:40     Шаблоны
Посмотрите здесь:

C++ шаблоны в си++
C++ Шаблоны
Шаблоны С++ C++
Шаблоны C++
C++ Шаблоны и т.д.(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 1
26.07.2013, 16:42     Шаблоны #2
Сначала создайте объект класса, а потом уже вызывайте методы.
C++
1
Pair<ArrayInt, ArrayInt>::SetPair(years);
SetPair - не статическая функция
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
26.07.2013, 16:50  [ТС]     Шаблоны #3
Croessmah, виноват, имел ввиду использовать
т.е. вот так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <class T1, class T2>
class Pair
{
private:
    T1 a;
    T2 b;
public:
    Pair(const T1 & aval, const T2 & bval);
    //Pair(int n);
    static void SetPair(int n);
    Pair() {}
    void Show();
    int Sum();
    ~Pair() {}
};
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,873
Записей в блоге: 2
Завершенные тесты: 1
26.07.2013, 16:52     Шаблоны #4
При таком подходе SetPair не будет иметь доступа к не статическим полям класса без объекта.
Не понятно что Вам нужно.
Yandex
Объявления
26.07.2013, 16:52     Шаблоны
Ответ Создать тему
Опции темы

Текущее время: 18:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru