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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
Algid
0 / 0 / 0
Регистрация: 25.12.2009
Сообщений: 13
#1

Перегрузка оператора - C++

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

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

Перегрузка оператора ‘=’ - C++
Подскажите, пожалуйста, можно ли как-то перегрузить оператор равно. Чтобы можно было его использовать как с правой, так и с левой...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора - C++
Добрый день! Мне нужно перегрузить в классе двумерного массива оператор ++, чтобы она возвращал максимальный элемент массива. класс...

Перегрузка оператора + - C++
Не могу заставить работать перегруженный оператор + в функции CMoveByVector Point.h: #define POINT_H #include &lt;iostream&gt; ...

Перегрузка оператора = - C++
Ввести строку символов S1. Программа должна содержать перегруженную операцию “=”, использование которой скопирует S1 в S2 при следующих...

Перегрузка оператора + - C++
Помогите с перегрузкой оператора +. Нужно сложить два объекта - двумерные массивы. сArray operator + (сArray &amp;arr) { int size...

9
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 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 / 2
Регистрация: 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 / 2
Регистрация: 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 / 2
Регистрация: 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
Привет! Вот еще темы с ответами:

Перегрузка оператора << - C++
Пишу класс My_String #include &lt;iostream&gt; const int MAX = 1000; class My_String { private: char str; public:

Перегрузка оператора += - C++
Есть два класса: Vec4(вектор из 4х float) и Mat4(вектор из 4х Vec4). Проблема в том что при перегрузке в Mat4 операции += я получаю ошибку...

Перегрузка оператора = - C++
Здравствуйте! При попытке заменить объект пользовательского класса q4 на q6 в контейнере set появляется ошибка: error C2678: binary '=' :...

Перегрузка оператора - C++
Здравствуйте, друзья. Помогите пожалуйста найти ошибку, вернее я знаю где, но пока не понимаю как её исправить: //Добавить в строковый...


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

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

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