Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
6 / 17 / 1
Регистрация: 17.11.2017
Сообщений: 51
1

Класс: Почему этот operator+ не хочет работать как функция внутри класса?

22.02.2018, 06:47. Показов 620. Ответов 9
Метки нет (Все метки)

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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class complex{
private:
int re, im;
public:
    complex(int r, int i){
        re = r; im = i;
    }
    friend complex operator+ (complex& a, complex& b){
        return complex((a.re + b.re), (a.im + b.im));
    }
    void ret(){
        cout << re << endl << im;
    }
};
 
int main(){
complex a(30, 10);
complex b(10, 15);
complex c = a+b;
c.ret();
_getch();
return 0;
}
Здравствуйте, изучааю C++, выучил императивный стиль программирования, процедурный, сейас изучаю ООП. Короче, не понятно, почему этот operator+ не хочет работать как функция внутри класса. Только с дружественной функцией всё компилируется, хотя в книге например Берна Страсупрута, автор не испльзовал друественные функции, или если почитать в других источниках, там тоже ввсё без использования дружественных функций. Это у меня компилятор с ума сошёл, или я что-то нетак делаю?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2018, 06:47
Ответы с готовыми решениями:

Функция указатель на класс, определенный внутри шаблонного класса
Доброго времени суток! Помогите пожалуйста разобрать со следующим кодом: template &lt;class T&gt;...

Как сделать, чтобы функция класса могла работать с обьектами другого класса
есть класс к примеру class One и класс к примеру class Two нужно чтобы элемент функция класса...

Как работать с массивом структур внутри класса?
Есть класс. Внутри массив структур. Как обратиться к массиву структур, тобы я мог спокойно...

почему форма из html не хочет работать с опп.если написать процедурно -все как по маслу д
&lt;?php } class autch{ public $autch; public function __construct($autch){ ...

9
║XLR8║
1210 / 912 / 270
Регистрация: 25.07.2009
Сообщений: 4,371
Записей в блоге: 5
22.02.2018, 07:34 2
BlackCoder,
C++
1
2
3
4
5
6
7
8
9
10
11
12
class complex
{
  private:
    int re, im;
 
  public:
    complex(int r, int i) : re{r}, im{i} {}
    complex operator+(const complex &other) const
    {
        return complex{re + other.re, im + other.im};
    }
};
0
6 / 17 / 1
Регистрация: 17.11.2017
Сообщений: 51
22.02.2018, 07:55  [ТС] 3
outoftime,
------ Build started: Project: Empty_project, Configuration: Debug Win32 ------
Compiling...
main.cpp
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(12) : error C2059: syntax error : ','
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(12) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(12) : error C2059: syntax error : '{'
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(12) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(12) : error C2059: syntax error : '{'
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(12) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(15) : error C2143: syntax error : missing ';' before '{'
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(15) : error C2275: 'complex' : illegal use of this type as an expression
c:\documents and settings\timodei\мои документы\visual studio 2008\projects\empty_project\empty_project\main.cpp(15) : error C2143: syntax error : missing ';' before '}'
Build log was saved at "file://c:\Documents and Settings\Timodei\Мои документы\Visual Studio 2008\Projects\Empty_project\Empty_project\Debug\BuildLog.htm "
Empty_project - 9 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
║XLR8║
1210 / 912 / 270
Регистрация: 25.07.2009
Сообщений: 4,371
Записей в блоге: 5
22.02.2018, 08:14 4
Цитата Сообщение от BlackCoder Посмотреть сообщение
Visual Studio 2008
А стандарт то С++11
0
6 / 17 / 1
Регистрация: 17.11.2017
Сообщений: 51
22.02.2018, 08:23  [ТС] 5
Цитата Сообщение от outoftime Посмотреть сообщение
А стандарт то С++11
Теперь совсем ничо не понятно...
0
566 / 349 / 132
Регистрация: 15.09.2017
Сообщений: 1,239
22.02.2018, 08:44 6
Цитата Сообщение от BlackCoder Посмотреть сообщение
Теперь совсем ничо не понятно...
Поставьте новее IDE с поддержкой c++11 (visual studio)
0
зомбяк
1532 / 1177 / 332
Регистрация: 14.05.2017
Сообщений: 3,822
22.02.2018, 11:03 7
Для старых компиляторов можно заменить
C++
1
return complex{re + other.re, im + other.im};
на
C++
1
return complex(re + other.re, im + other.im);
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,518
22.02.2018, 12:20 8
Цитата Сообщение от BlackCoder Посмотреть сообщение
почему этот operator+ не хочет работать как функция внутри класса.
И? Показывайте, как вы пытались заставить его работать "как функция внутри класса". Что вы там понаписывали отсюда не видно.
0
303 / 215 / 74
Регистрация: 23.05.2011
Сообщений: 971
22.02.2018, 12:35 9
Цитата Сообщение от BlackCoder Посмотреть сообщение
friend complex operator+ (complex& a, complex& b)
Этот код не будет работать с выражениями вида:complex(5,7)+complex(4,5).

Дело в том, T& — lvalue, а то есть выражения, которым можно присвоить значения (например переменные).
Поэтому результаты вызова других функций не годятся.
Даже, например, a+b+c вызовет ошибку.

Поэтому используйте в арифметических операторах без присваивания только const T& (принимает что угодно) или T (но тогда будет создаваться копия).

У тебя должно быть friend complex operator+ (const complex& a, const complex& b).

А теперь по теме:
Для оператора, принимающего два аргумента, шаблон функции такой:
C++
1
2
3
4
5
6
7
class A{
public:
   A operator+(A other){
       // this — левый аргумент
       // other — правый аргумент
   }
}
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,518
22.02.2018, 21:31 10
Цитата Сообщение от New man Посмотреть сообщение
А теперь по теме:
Для оператора, принимающего два аргумента, шаблон функции такой:
C++
1
2
3
4
5
6
7
class A{
public:
   A operator+(A other){
       // this — левый аргумент
       // other — правый аргумент
   }
}
Ну уж тогда, следуя вашим же советам

C++
1
2
3
4
5
6
7
class A{
public:
   A operator+(const A &other) const {
       // this — левый аргумент
       // other — правый аргумент
   }
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2018, 21:31

Почему не хочет работать col?
&lt;div class=&quot;row&quot;&gt; &lt;div class=&quot;col-md-4&quot;&gt; &lt;h2&gt;Левый блок&lt;/h2&gt; ...

Почему не хочет работать код?
Если динамическое выделение памяти, то работать не хочет. #include &lt;iostream&gt; #include...

почему то не хочет работать с 4 гб озу
мать H55M-E21 не принимает платы по 4 гб, только по 2, к примеру 2+2=гуд, 4+2=феил, 2+4=феил,...

Не хочет работать функция rename
Необходимо переименовать файл, если он находится в самой папке проекта, то есть ну нужно указывать...

Функция ну никак не хочет работать
Вот функция void OPEN_USER_COMMAND(System::String^ PolzCom) { System::String^...

Почему оператор case не хочет работать?
Разве char - это не &quot;односимвольная строка&quot;? foreach var s in ReadAllLines('Setting.txt') do...


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

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

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