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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
#1

Шаблоны и статик - C++

04.03.2013, 01:17. Просмотров 294. Ответов 7
Метки нет (Все метки)

Добрый вечер.
Вот кусочек кода, почему то переменная dx постоянно обнуляется хотя она static. В чем проблема?
C++
1
2
3
4
5
6
7
8
9
10
11
template <class T, int n>
void init (T (&arr) [n])
{
    static int dx;
    dx++;
    for (int i=0;i<n;i++)
    {
        *(arr+i)=i*dx;
    }
    cout << dx;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2013, 01:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны и статик (C++):

Статик + конструктор - C++
class A { public: A() { a = 10; b = 20; } private: static int a, b;

Синтакисис статик поля - C++
class A { potected: int i; A (int i); const static A a; }; A::A (int i) { this-&gt;i=i;

Инициализация статик класс мемберов - C++
Добрый день, есть какой-то лайф-фак, чтобы на ряду с возможностями С++11 инициализация класс-мемберов значениями по умол прям в header...

Реализация статик структуры в хедер файле - C++
Всем привет. Есть у меня структура со статическими методами и я решил не разделять реализацию и объявление и засунуть всё в один хедер файл...

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». - C++
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис) - C++
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,224
Записей в блоге: 3
Завершенные тесты: 1
04.03.2013, 01:19 #2
А весь код можно увидеть?
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
04.03.2013, 01:23  [ТС] #3
Croessmah,
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
 
using namespace std;
 
template <class T, int n>
void init (T (&arr) [n])
{
    static int dx;
    dx++;
    for (int i=0;i<n;i++)
    {
        *(arr+i)=i*dx;
    }
    cout << dx;
}
 
template <class T, int n>
void out (T (&arr) [n])
{
    for (int i=0;i<n;i++)
    {
        cout << *(arr+i) << " ";
    }
    cout << "\n\n";
}
 
template <class T, int n, int m>
void add (T (&a) [n], T (&b) [m], T (&c) [n+m])
{
    for (int i=0,j=0,h=0;h<(n+m);h++)
    {
        if (i==n)
        {
            *(c+h)=*(b+j);
            j++;
            continue;
        }
        if (j==m)
        {
            *(c+h)=*(a+i);
            i++;
            continue;
        }
        if (*(b+j)<=*(a+i))
        {
            *(c+h)=*(b+j);
            j++;
        }
        else
        {
            *(c+h)=*(a+i);
            i++;
        }
    }
}
 
int main()
{
    const int n=6,m=7;
    int a[n];
    int b[m];
    int c[n+m];
 
    init(a);
    out(a);
    init(b);
    out(b);
    add(a,b,c);
    out(c);
 
    return 0;
}
Croessmah
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,224
Записей в блоге: 3
Завершенные тесты: 1
04.03.2013, 01:30 #4
А Вы понимаете что такое шаблон и зачем он нужен?
У Вас будет две разные функции с двумя разными переменными.

Добавлено через 3 минуты
если бы было так:
C++
1
int b[n];
то была бы одна функция, т.к. a и b одного размера и одного типа, а следовательно параметры шаблона одни и те же, поэтому создастся только одна функция
C++
1
void init (int (&arr) [6]);
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
04.03.2013, 01:30  [ТС] #5
Croessmah, получается что то похожее на перегрузку функций?
Croessmah
Модератор
Эксперт CЭксперт С++
13132 / 7395 / 828
Регистрация: 27.09.2012
Сообщений: 18,224
Записей в блоге: 3
Завершенные тесты: 1
04.03.2013, 01:32 #6
Цитата Сообщение от fuelcs Посмотреть сообщение
получается что то похожее на перегрузку функций?
ага. У Вас будет для каждого уникального набора параметров шаблона своя функция
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
04.03.2013, 01:41 #7
Цитата Сообщение от fuelcs Посмотреть сообщение
static int dx;
а инициализировать разве не надо?
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
04.03.2013, 01:42  [ТС] #8
Цитата Сообщение от ValeryS Посмотреть сообщение
а инициализировать разве не надо?
static вроде не нужно, он нулем инициализируется...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2013, 01:42
Привет! Вот еще темы с ответами:

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны - C++
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

Почему без "статик" не работает? - C++
Дело в том что без него (без static) программка не работает корректно. по задумке (а оно так и выходит) в открывающемся окошке фоновый...

Шаблоны - C++
Пусть есть шаблон-структура. template &lt;class Data&gt; struct A { Data p; }; И есть указатели на объекты: A&lt;int&gt; *b; ...

Шаблоны - C++
На сколько я знаю, в с++ нельзя указать типу шаблона что то вроде: &lt;T extends MyClass&gt; Поэтому такой код: class A { public: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.03.2013, 01:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru