Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сложная задачка Сформировать на экране изображение показанное на рисунке. Построить программу таким образом, чтобы щелчек мыши на ключевом слове соответствующего оператора приводил к выводу в информационное окно... https://www.cyberforum.ru/ cpp-beginners/ thread405680.html Перевод кода из Pascal в C++: простые числа C++
помогите, пожалуйста, перевести этот код в C++ :impossible: program chisla; uses Crt; const n = 5; var y: real; flag: boolean; i,j,x: integer; procedure Analysis;
C++ Inline функции https://www.cyberforum.ru/ cpp-beginners/ thread405665.html
Друзья!Инлайн функции могу быть определены только внтури класса?Или могут быть определены вне класса?Если вне,то как?Спасибо!
C++ Вывести символ на экран, если он является печатаемым и видимым https://www.cyberforum.ru/ cpp-beginners/ thread405659.html
Вывести символ на экран, если он является печатаемым и видимым
Найти количество элементов в массиве, имеющих значение выше заданного C++
Найти количество элементов в массиве, имеющих значение выше заданного
C++ Проверить на ошибки класс "Двусвязный список" Вот задание 1. Реализовать (на основе лекционного материала) класс String, который представляет строку символов произвольной длины (отчет - реализация класса). 2. Разработать класс двусвязный... https://www.cyberforum.ru/ cpp-beginners/ thread405656.html
C++ Нужна небольшая помощь начинающему вот код с учебника на проверку является ли число простым.Но я не могу понять откуда берется переменная n ? до какого значения проверяется цикл если n это только sqrt((double)n) , а от какого число не... https://www.cyberforum.ru/ cpp-beginners/ thread405638.html C++ Нужно сделать программу:
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1. сумму положительных элементов массива; 2. произведение элементов массива, расположенных между максимальным по модулю и...
C++ не считает сумму элементов на побочной диагонали почему-то. https://www.cyberforum.ru/ cpp-beginners/ thread405619.html
/*14. #include "stdafx.h" #include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h> #include <stdio.h> using namespace std;
C++ Вычисление определенного ингерала методом прямоугольников Здравствуйте, уже целый день сижу, не могу понять где ошибка помогите пожалуйста: (наверно как обычно туплю.....) Вот моя программа:#include <iostream> #include <stdio.h> #include <fstream>... https://www.cyberforum.ru/ cpp-beginners/ thread405598.html
Задачки для Borland C++ C++
1. ((sqrt a)*sin^2(x))/x+cos(x) a=8.87 диапазон 5градусов<=x<=80градусов дельта x=15градусов. 2. x*tgx-1/3=0 3. x^3*e^2x 0;1 все данные,которые были,написал.
C++ Строки Borland C++ Сумма char чисел. Помогите решить задачу, используя библиотеку stdio.h Дана строка. Слова в предложении разделены одним или несколькими пробелами. Слова могут состоять только из цифр или букв. Необходимо найти... https://www.cyberforum.ru/ cpp-beginners/ thread405592.html
1 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 9
0

Возможно ли создание объекта шаблонного класса в функции этого класса? - C++ - Ответ 2277495

12.12.2011, 21:55. Показов 1956. Ответов 2
Метки (Все метки)

Доброго времени суток, уважаемые форумчане

Мне по лабам задали задание - реализовать шаблон контейнера (множество) с операциями доступа по индексу [], получения длины () и разности множеств "-". Вот с последним и проблемка. Опыта у меня маловато, поэтому не могу понять, то ли лыжи не едут, то ли я дурак Меня интересует можно ли как-то реализовать перегрузку минуса, чтобы он возвращал ссылку на объект (или объект).

Код класса:
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream>
 
using namespace std;
 
template <class T> 
class Set
{
    int size;
    T* data;
public:
    Set();                  //Конструктор пустого множества
    Set(int n,T a);         //Конструктор с параметром
    Set(const Set<T>& s);   //Копирования
    ~Set();                 //Деструктор
 
    Set<T>& operator =(const Set<T>& a);    //Присваивания
    T& operator [](int index);                  //Доступ по индексу
    int operator ()();                      //Возврат длины
    Set<T> operator -(const Set<T>& a);     //Разность множеств (Не реализовано)
 
    void GetD(const Set<T>& a,const Set<T>& b); //Замена предыдущего
 
    void Add(T a);  //Добавляет элемент
 
    friend ostream& operator << <>(ostream& out, const Set<T>& a);
    friend istream& operator >> <>(istream& in, Set<T>& a);
};
 
 
template <class T>
Set<T>::Set()
{
    size=0;
    data=0;
}
 
template <class T>
Set<T>::Set(int n,T a)
{
    size=n;
    data=new T[size];
    for(int i=0;i<size;i++)
        data[i]=a;
}
 
template <class T>
Set<T>::Set(const Set<T>& a)
{
    size=a.size;
    data=new T[size];
    for(int i=0;i<size;i++)
        data[i]=a.data[i];
}
 
template <class T>
Set<T>::~Set()
{
    delete[] data;
    data=0;
}
 
template <class T>
Set<T>& Set<T>::operator=(const Set<T>& a)  //Оператор присваивания
{
    if(this==&a) return *this;
    size=a.size;
    if(data!=0) delete[] data;
    data=new T[size];
    for(int i=0;i<size;i++)
        data[i]=a.data[i];
    return *this;
}
 
template <class T>  
T& Set<T>::operator[](int index) //операция доступа по индексу 
{ 
    if (index<size) return data[index]; 
    else  cout<<"\nError! Index>size"; 
}
 
template <class T>  
int Set<T>::operator ()() //операция для получения длины вектора 
{ 
    return size; 
} 
 
template <class T>  
void Set<T>::Add(T a)
{
    T* newdata=new T[size+1];
    for(int i=0;i<size;i++)
        newdata[i]=data[i];
    newdata[size]=a;
    size=size+1;
    delete[] data;
    data=newdata;
}
 
 
template<class T>
Set<T> Set<T>::operator -(const Set<T>& a)
{
    Set<T> temp();                    //Вот здесь компилятор не может "опознать" класс
    for(int i=0;i<size;i++)
        for(int j=0;j<a.size;j++)
        {
            if(data[i]!=a.data[j])
                temp.Add(data[i]);       //И здесь требует, чтобы выражение слева от точки было классом
        }
    return temp;
}
*/
 
/* В связи с невозможностью выполнения предыдущей задачи
произведена замена оператора на функцию.
*/
 
template <class T>  
void Set<T>::GetD(const Set<T> &a, const Set<T> &b)
{
    T* dummy;       //Указатель на объект класса
    dummy=0;
    if(data!=0) return; //Кидать только в пустой
    for(int i=0;i<a.size;i++)       //Проверим все элементы множества А
        for(int j=0;j<b.size;j++)   //На наличие таких же в множестве В
        {
            if(a.data[i]!=b.data[j]&&dummy!=a.data+i*sizeof(T)) //И выберем только те, которых нет в В
            {
                this->Add(a.data[i]);       //Добавим их в множество С(результат)
                dummy=a.data+i*sizeof(T);   //И пометим адрес, чтобы не создавать дубликатов
            }
        }
}
 
template <class T>  
ostream& operator <<(ostream& out,const Set<T>& a) //Вывод
{
    if(a.data==0)
    {
        out<<"Empty Set"<<endl;
        return out;
    }
    for(int i=0;i<a.size;i++) 
        out<<a.data[i]<<" "; 
    return out; 
} 
 
template <class T>  
istream& operator >>(istream& in,Set <T>& a) 
{ 
    int n;
    T t;
    cout<<"N-? ";cin>>n;
    for(int i=0;i<n;++i) 
    {
        in>>t;
        a.Add(t);
    }   
    return in; 
}


Вернуться к обсуждению:
Возможно ли создание объекта шаблонного класса в функции этого класса? C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2011, 21:55
Готовые ответы и решения:

Создание объекта класса внутри этого класса
Можно ли улучшить такой код: // C# program to illustrate the // use of object type params ...

Создание объекта класса в методе этого же класса
собственно вопрос. можно ли создавать объект класса в методе того же класса? насколько это...

Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Привет. Есть такой код class Model { public: Model(); Model(int verticesSize, int facesSize);...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2011, 21:55
Помогаю со студенческими работами здесь

TIdNotify, создание и удаление объекта этого класса
Как правильно использовать компонент TIdNotify, а точнее как правильно создавать/удалять объект...

Инициализация объекта класса объектом этого же класса
В задаче создается объект класса hoba, в который добавляются объекты базового и производного...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Клонирование объекта шаблонного класса
Задача ниже представленного механизма - запоминать функции/методы со всеми аргументами, и...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru