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

Как такое может быть? (вызов функции-члена без объекта) - C++

Восстановить пароль Регистрация
 
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
12.03.2013, 23:39     Как такое может быть? (вызов функции-члена без объекта) #1
собственно вопрос озвучен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
class Test
{
  public:
    void print()
    {   
      cout << "This is hack!" << endl;
    }   
};
 
 
int main()
{
  Test *ptr = (Test *) 4;
  ptr->print();
 
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 23:39     Как такое может быть? (вызов функции-члена без объекта)
Посмотрите здесь:

Как такое может быть? C++
C++ Как такое может быть?
рекурсивный вызов функции-члена C++
C++ скажите что такое может быть?
C++ Перегруженный оператор сдвига '<<' не функции-члена класса для объекта ostream
Вызов глобальной функции из объекта класса C++
C++ Может ли быть такое?
C++ Простое Наследование и ошибка "Недопустимый вызов нестатической функции-члена"
C++ Объявление класса, создание объекта и вызов функции-члена
C++ Вызов функции-члена класса по адресу в памяти
C++ Вызов функции-члена элементов списка
C++ вызов функции члена через std::function

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
12.03.2013, 23:43     Как такое может быть? (вызов функции-члена без объекта) #2
Нельзя так делать
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1238 / 987 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
12.03.2013, 23:50     Как такое может быть? (вызов функции-члена без объекта) #3
Потому что на самом деле
C++
1
2
3
4
5
6
7
int main()
{
  Test *ptr = (Test *) 4;
  ptr->print();
 
  return 0;
}
понимается компилятором примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
  Test *ptr = (Test *) 4;
  Test_print(ptr);
 
  return 0;
}
 
void Test_print(Test *this)
{
    std::cout << "This is hack!" << std::endl;
}
this не используется в методе, поэтому-то и всё хорошо.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
12.03.2013, 23:51     Как такое может быть? (вызов функции-члена без объекта) #4
упростим твой код:

C++
1
2
Test *ptr = 0;
  ptr->print();
объект в памяти не нужен для косвенного вызова функций)
Yandex
Объявления
12.03.2013, 23:51     Как такое может быть? (вызов функции-члена без объекта)
Ответ Создать тему
Опции темы

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