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

Как для шаблонного класса определить действие для частного случая - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти наименьшее из значений компонент файла с четными номерами http://www.cyberforum.ru/cpp-beginners/thread1169746.html
Дан файл f, компоненты которого являются действительными числами. Найти: 1. наибольшее из значений компонент f; 2. наименьшее из значений компонент с четными номерами; 3. наибольшее из значений модулей компонент с нечетными номерами; 4. сумму наибольшего и наименьшего из значений компонент файла f; 5. разность первой и последней компонент файла f.
C++ Почему в файл значение дублируется (записывается дважды)? Суть: при чтении с файла f записываю данные(числа) в массив a. Потом значения этого массива по очереди записываю в файл f1 и f2. Все нормально. Но потом, когда записываю данные из файла f1 и f2 в массив a, а потом сравниваю и после сравнения кидаю в файл f3 и f4 по очереди, то в файле f3 и f4 значения дублируются. К примеру, в файле f1 такая запись: 25 45 20 49 3 1 29, f2: 30 50 15 5 9 42 13,... http://www.cyberforum.ru/cpp-beginners/thread1169741.html
C++ В массиве Y1, ... , Yn найти два элемента, среднее арифметическое которых равно заданному числу X
Даны натуральное число n, действительное число x и массив действительных чисел y1, ... , yn. В массиве y1, ... , yn найти два элемента, среднее арифметическое которых равно x. Если таких элементов не найдется, со- общить об этом.
C++ Перенаправление файловых потоков, перехват системных вызовов
Есть несколько программ, например C:\p1dir\prog1.exe, C:\p2dir\prog2.exe, C:\p3dir\prog3.exe каждая программа хранит настройки в различных папках. Например первая хранит в C:\p1dirSave\cfg.ini, вторая хранит в C:\config.ini, третья хранит в C:\Windows\conf.ini. Как, зная в каких путях программы хранят свои настройки, и названия этих файлов, перенаправить\перехватить системные вызовы или что-то в...
C++ Найти максимальное количество простых чисел, идущих подряд http://www.cyberforum.ru/cpp-beginners/thread1169727.html
В последовательности целых чисел найти максимальное количество простых чисел, идущих подряд (программа должна содержать логическую функцию, проверяющую, является ли заданное число простым).
C++ Объявление переменной своего типа Есть код #include <iostream> #include <iomanip> //#include "complexz" using namespace std; int main(){ double a,b,c,d; complexz zz; подробнее

Показать сообщение отдельно
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
08.05.2014, 02:09     Как для шаблонного класса определить действие для частного случая
Hrollo, студия это собирает. Но код содержит ошибки тем не менее.
К тому же код, который у тебя отличается от моего кардинально. Я специализировал всю функцию типом String<int>, а ты хочешь специализацию String<T>, где T = int.
В общем вот я исправил все:
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <cstring>
#include <cctype>
 
using namespace std;
 
template<typename T>
class String
{
private:
    char  *str;
    int length;
    const static int Max = 65535;
public:
    String();
    String(const char *s);
    String(const String &s);
    String &operator=(const String &s);
    String &operator=(const char *s);
    ~String();
 
    template <typename T1>
    friend ostream & operator<<(ostream &os, const String<T1> &s);
    template <typename T1>
    friend istream & operator>>(istream &is, String<T1> &s);
};
 
template<typename T>
String<T>::String()
{
    str = NULL;
    length = 0;
}
 
template<typename T>
String<T>::String(const char *s)
{
    length = strlen(s);
    str = new char[length+1];
    strcpy(str,s);
}
 
template<typename T>
String<T>::String(const String<T> &s)
{
    length = s.length;
    str = new char[length+1];
    strcpy(str,s.str);
}
 
template<typename T>
String<T> &String<T>::operator=(const String<T> &s)
{
    if(this == &s)
        return *this;
    delete [] str;
    length = s.length;
    str = new char[length+1];
    strcpy(str,s.str);
    return *this;
}
 
template<typename T>
String<T> &String<T>::operator=(const char *s)
{
    delete []str;
    length = strlen(s);
    str = new char[length+1];
    strcpy(str,s);
    return *this;
}
 
 
template<typename T>
String<T>::~String()
{
    delete []str;
}
 
template <typename T>
ostream &operator<<(ostream &os, const String<T> &s)
{
    for(int i(0);i<s.length;i++)
        os<<s.str[i];
    return os;
}
 
template<>
ostream & operator<< <int>(ostream &os, const String<int> &s) //<-- вариант работает
{
    for(int i(0);i<s.length;i++)
    {
        if(isdigit(s.str[i]))
            os<<s.str[i];
    }
    return os;
}
 
 
template <typename T>
istream &operator>>(istream &is, String<T> & s)
{
    char temp[String<T>::Max];
    is.getline(temp,String<T>::Max);
    if(is)
        s = temp;
    return is;
}
 
 
 
int main()
{
    String<int> str("1234hyu5");
    cout<<"Input string of the numb:";
 
    cout<<str<<endl;
    return 0;
}
 
Текущее время: 06:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru