Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
1

Перегрузка оператора

28.02.2010, 15:24. Просмотров 3985. Ответов 9
Метки нет (Все метки)

Здравствуйте.Появился вопрос:
есть две переменные float **m,**m1
как перегрузить оператор = в данном случае?(имею ввиду только первую строку,где объявляется перегрузка оператора
например Matrix &Matrix::operator=(Matrix &m))
и можно ли вообще это сделать?или нужно,чтобы был обязательно объявлен класс?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2010, 15:24
Ответы с готовыми решениями:

Перегрузка оператора <<
Господа, у меня когнитивный диссонанс. При компиляции программы вылезает...

Перегрузка оператора +
Здравствуйте! Не могу понять, из-за чего появляется ошибка. Вот программа,...

Перегрузка оператора '='
Не давно стал изучать С++ и дошёл до перегрузок операторов, и с книги написал...

Перегрузка оператора
Есть такой вот код: #include &lt;iostream&gt; using namespace std; template &lt;class...

Перегрузка оператора
Имеется код: #include &lt;iostream&gt; class X { public: int a; int b;...

9
Nick Alte
Эксперт С++
1647 / 1019 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
28.02.2010, 17:51 2
Переопределение операторов возможно только для вновь создаваемых типов (классы, структуры). Указатели же (неважно, на что) являются встроенным типом.
0
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
28.02.2010, 18:38  [ТС] 3
А если у нас перегрузка = для случая a=m
где float **a
Matrix m(класс)
можно такое реализовать?
или a тоже должно быть классом?
0
breate
56 / 56 / 6
Регистрация: 23.10.2009
Сообщений: 250
28.02.2010, 18:45 4
Цитата Сообщение от Algid Посмотреть сообщение
Здравствуйте.Появился вопрос:
есть две переменные float **m,**m
оператор в перегрузке не нуждается
возможно отвечу на вопрос следующими прототипами

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Class Matrix{
Matrix &operator = (float **a)
friend float** operator=(float **a,Matrix M)
}
 
Matrix &Matrix::operator = (const float **a){
 
return *this
}
 
 
 
float operator=(float **a , Matrix M){
 
float **temp;
 
return temp;
}
0
Михаэль
0 / 0 / 0
Регистрация: 22.02.2010
Сообщений: 15
28.02.2010, 19:12 5
Оператор = должен быть членом класса, поэтому оператор с левосторонним операндом стандартного типа невозможен.
0
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
28.02.2010, 19:16  [ТС] 6
А разве 4я строка согласуется с 14ой?
0
breate
56 / 56 / 6
Регистрация: 23.10.2009
Сообщений: 250
28.02.2010, 20:02 7
Михаэль, неправ! оператор может быть как членом так и другом

нет, нужно float **,извините 2-е суток не спал
0
Михаэль
0 / 0 / 0
Регистрация: 22.02.2010
Сообщений: 15
28.02.2010, 22:19 8
Цитата Сообщение от breate Посмотреть сообщение
Михаэль, неправ! оператор может быть как членом так и другом
Не любой оператор. Есть операторы, которые могут быть только членами класса. К таковым относятся операторы =, [] и ().

Следующий код при компиляции выдает ошибку:

C++
1
2
3
4
5
6
7
class A
{
    friend int &operator = (int &, const A &);
};
 
void main()
{}
error C2801: 'operator =' must be a non-static member
0
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
28.02.2010, 22:54  [ТС] 9
Кстати строка friend float** operator=(float **a,Matrix &m) выдаёт тоже ошибку
'operator =' must be a non-static member
0
breate
56 / 56 / 6
Регистрация: 23.10.2009
Сообщений: 250
01.03.2010, 01:45 10
Цитата Сообщение от Algid Посмотреть сообщение
Кстати строка friend float** operator=(float **a,Matrix &m) выдаёт тоже ошибку
'operator =' must be a non-static member
значит не хватает & перед operator

Добавлено через 35 минут
Цитата Сообщение от breate Посмотреть сообщение
Цитата:
Сообщение от Algid
Кстати строка friend float** operator=(float **a,Matrix &m) выдаёт тоже ошибку
'operator =' must be a non-static member
значит не хватает & перед operator
прошу прощения
The following operators can be overloaded only as nonstatic members:

Assignment =

Class member access ->

Subscripting []

Function call ()

Possible C2801 causes:

Overloaded operator is not a class, structure, or union member.
мы не можем перегружать эти операторы для встроенных классов
1
01.03.2010, 01:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2010, 01:45

Перегрузка оператора
Имеется время, например 12:12:12 Перегрузка инкремента Time &amp;Time::operator...

Перегрузка оператора ()
Привет всем помогите придумать способ реализаци следущей задачи: есть класс...

Перегрузка оператора +
Здравствуйте. Проблема в следующем: у меня есть класс. Список, реализующий...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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