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

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

Войти
Регистрация
Восстановить пароль
 
 
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
#1

С какой стороны функция - C++

27.05.2012, 22:50. Просмотров 618. Ответов 19

Перегрузил оператор:
C++
1
2
3
4
template<typename _My> _My& List<_My>::Iter::operator *() const
{
    return *_Tptr;
}
Можно ли как-нибудь узнать с какой стороны от знака равенства стоит эта функция?
Пробовал перегрузить таким образом:
C++
1
2
3
4
5
6
7
8
template<typename _My> _My& List<_My>::Iter::operator *() const
{
    return *_Tptr;
}
template<typename _My> _My List<_My>::Iter::operator *() const
{
    return *_Tptr;
}
Но компилятор ругается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2012, 22:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С какой стороны функция (C++):

Найти с какой стороны цикл будет находить 0 скорее и на какой позиции он стоит - C++
Дан целочисленный массив а, который состоит из десяти чисел(от 0 до 9) и заполняется рандомно. Нужно найти с какой стороны цикл будет...

Узнать с какой стороны пересекается прямоугольник и круг - C++
Как узнать с какой стороны пересекается прямоугольник и круг?

Определить, с какой стороны улицы живет наибольшее количество жителей? - C++
Известно количество жителей каждого дома.Нумерация домов идет подряд.С одной стороны улицы четные дома, с другой нечетные.С какой стороны...

Даны натуральные числа a и b которые определяют стороны прямоугольника.На сколько квадратов, стороны которого...... - C++
Есть одна задачка....помогите решить. Даны натуральные числа a и b которые определяют стороны прямоугольника.На сколько квадратов,...

По какой-то причине не работает функция - C++
Доброго времени суток, уважаемый форум. #include &lt;iostream&gt; using namespace std; class Rectangle { public: ...

Даны три стороны одного и три стороны другого треугольника. Я, чайник нужно в С++ - C++
Даны три стороны одного и три стороны другого треугольника. Эти треугольники равновеликие, т.е. имеют равные площади

19
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,372
Записей в блоге: 17
27.05.2012, 23:48 #2
Текущий объект(this) обычно стоит слева от оператора а тот что справа(если он есть) передается как параметр (т.е указывается в скобках)
0
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
28.05.2012, 07:21  [ТС] #3
Дополню. Мне необходимо различить такие ситуации:
C++
1
2
*а = 5;
b = *a
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.05.2012, 09:00 #4
Цитата Сообщение от Lordif Посмотреть сообщение
Дополню.
Если тебе нужно различать эти ситуации, то ты просто не правильно их используешь.

Допустимы два варианта этой перегрузки:

C++
1
2
3
4
5
6
7
8
9
10
11
template<typename _My>
const _My& List<_My>::Iter::operator *() const
{
    return *_Tptr;
}
 
template<typename _My>
_My & List<_My>::Iter::operator *()
{
    return *_Tptr;
}
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,372
Записей в блоге: 17
28.05.2012, 17:20 #5
Вариант с const как я понимаю для b = *a ?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.05.2012, 17:53 #6
да
(всякие символы)
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,372
Записей в блоге: 17
28.05.2012, 18:05 #7
Чет не пойму что не то...

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
using namespace std;
 
struct A
 {
   const A& operator *() const;
         A& operator *();
 };
//-----------------------------------
const A&   A::operator *() const
{
 cout<<"first"<<endl;
 return *this;
}
//-----------------------------------
A& A::operator *()
{
 cout<<"second"<<endl;
 return *this;
}
//-----------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
A a,b;
 
*a = b;
b = *a;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Так только второе выводит..

Добавлено через 58 секунд
http://codepad.org/PIQJdtpz
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.05.2012, 18:20 #8
Это уже выпендрёж оптимизирующего компилятора.

Попробуй нормальную реализацию написать когда возвращается ссылка не на себя, а на данные.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,372
Записей в блоге: 17
28.05.2012, 18:29 #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
29
30
31
32
33
34
35
using namespace std;
 
struct A
 {
  int data;
   const int& operator *() const;
         int& operator *();
 };
//-----------------------------------
const int&   A::operator *() const
{
 cout<<"first"<<endl;
 return data;
}
//-----------------------------------
int& A::operator *()
{
 cout<<"second"<<endl;
 return data;
}
//-----------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
A a;
int b;
 
*a = 5;
b = *a;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Тот же результат http://codepad.org/JjMVui5L
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
28.05.2012, 18:43 #10
На сколько мне известно, если перегружена функция как const, то const-версия используется только для const-объектов.

Добавлено через 7 минут
Немного не так сформулировал. const-объекты не могут вызывать не-const функции. Для не-const же объектов если нет перегрузки функции, которая объявлена как const, то используется она, иначе используется не-const версия функции.
1
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,372
Записей в блоге: 17
28.05.2012, 18:47 #11
если перегружена функция как const, то const-версия используется только для const-объектов.
Чет не догнал про что речь про func()const{} или про const T& func(){}; ?
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
28.05.2012, 18:56 #12
Ну раз речь про сами функции, а не возвращаемые объекты, то наверно
C++
1
void func() const;
все таки

Добавлено через 7 минут
То есть например есть такой класс:

C++
1
2
3
4
5
6
7
8
9
10
11
class someClass {
  public:
   someClass();
 
   void someFunc() const;
   void someFunc();
   
   void anotherSomeFunc();
 
   void anotherSomeFunc2() const;
};
C++
1
2
3
4
5
6
7
8
9
10
11
someClass someObject;
const someClass anotherSomeObject;
 
someObject.someFunc(); //вызовется не-const версия функции, так как объект не константный
anotherSomeObject.someFunc(); //вызовется const версия функции, так как объект константный
 
someObject.anotherSomeFunc(); //вызовется не-const версия функции, так как объект не константный
anotherSomeObject.anotherSomeFunc(); //ошибка компиляции, нет const версии функции
 
someObject.anotherSomeFunc2(); //вызовется const версия функции, так как нет перегрузки не-const версии функции
anotherSomeObject.anotherSomeFunc2(); //вызовется const версия функции, так как объект константный
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,372
Записей в блоге: 17
28.05.2012, 18:56 #13
Тобиш предложеный вариант - не вариант...

Toshkarik, уже проверил создав const A -объект
0
grizlik78
Эксперт С++
1973 / 1466 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
28.05.2012, 19:04 #14
То есть остаётся такой кривой способ:
C++
1
b = *static_cast<const A>(a);
Бррр...
0
Lordif
21 / 21 / 1
Регистрация: 18.04.2010
Сообщений: 87
28.05.2012, 21:38  [ТС] #15
И никаких других вариантов нет? Может как то окольными путями?
0
28.05.2012, 21:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2012, 21:38
Привет! Вот еще темы с ответами:

Найти, в какой точке функция принимает наибольшее значение - C++
Протабулювання {как это перевести?} функцию у = cosx3 / 2,1 + cosx2 / 1,1 - 8,3sin (3x + 1), на промежутке с шагом h = 1.2 . Вычислить: ...

Функция sizeof() всегда должна присваиваться какой либо переменной? - C++
Если на 32 строке убрать int i т.е. написать просто sizeof(s); то программа зависнит. #pragma hdstop #include &lt;stdio.h&gt; #include...

Как определять какой метод должен быть статическим, а какой нет? - C++
Quer::add_line_to_vec: недопустимый вызов нестатической функции-члена

Как узнать, какой функции какой файл *.a соответсвует? - C++
Друзья! Работаю с mingw, вот там надо так: если, допустим, вызываешь API- функцию, то надо подключать соответствующую библиотеку (?),...


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

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

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