powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / не знал что так
13 сообщений из 13, страница 1 из 1
не знал что так
    #34708758
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
конструктор должен быть вызван как:
Код: plaintext
_Accepter = new Accepter(_Cache, _ErrLog);
желая намеренно вызвать ошибку, вызвал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
_Accepter = new Accepter(NULL, _ErrLog);

Accepter::Accepter(Cache *cache, Log *err_log)
{
	cache->Print(NULL,  1 );
}// Accepter()

но ошибки не случилось
...
Рейтинг: 0 / 0
не знал что так
    #34708836
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Print не обращается полям сласса Accepter, а значит ему всё равно на указатель this.
...
Рейтинг: 0 / 0
не знал что так
    #34708860
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daevaornPrint не обращается полям сласса Accepter, а значит ему всё равно на указатель this.

просто
Код: plaintext
cache->Print(NULL,  1 );
а cache = NULL
...
Рейтинг: 0 / 0
не знал что так
    #34708870
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я про то и написал. Хоть NULL, хоть -1
...
Рейтинг: 0 / 0
не знал что так
    #34708890
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daevaornЯ про то и написал. Хоть NULL, хоть -1

а что он тогда делает? причем this, как он вызывает NULL->print()
...
Рейтинг: 0 / 0
не знал что так
    #34708893
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tubrik daevaornЯ про то и написал. Хоть NULL, хоть -1

а что он тогда делает? причем this, как он вызывает NULL->print()
Вызывается метод Print и в него передатся указатель this, который равен 0. Поскольку внутри Print нет обращения к полям класса, а значит нет отбращения к this, то метод отрабатывает без ошибок.
...
Рейтинг: 0 / 0
не знал что так
    #34708910
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде понял, так стало быть можно метод любого класса вызвать, который обрабатывает данные переданные через параметры и не обращается к полям свого класса?
...
Рейтинг: 0 / 0
не знал что так
    #34708912
daevaorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tubrikвроде понял, так стало быть можно метод любого класса вызвать, который обрабатывает данные переданные через параметры и не обращается к полям свого класса?
Да. Любой не виртуальный метод. Но лучше так никогда не делать. Это потенциальная кладезь ошибок.
...
Рейтинг: 0 / 0
не знал что так
    #34709137
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daevaorn wrote:

> Да. Любой не виртуальный метод. Но лучше так никогда не делать. Это
> потенциальная кладезь ошибок.
Лучше этот вопрос в faq какой-нибудь добавить.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
не знал что так
    #34709501
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrikвроде понял, так стало быть можно метод любого класса вызвать, который обрабатывает данные переданные через параметры и не обращается к полям свого класса?

По своей сути, это уже не метод, а функция. Для того, чтобы не загромаждать класс, ее желательно выносить из класса, оставляя в том же наэймспейсе.
...
Рейтинг: 0 / 0
не знал что так
    #34709796
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh Tubrikвроде понял, так стало быть можно метод любого класса вызвать, который обрабатывает данные переданные через параметры и не обращается к полям свого класса?

По своей сути, это уже не метод, а функция. Для того, чтобы не загромаждать класс, ее желательно выносить из класса, оставляя в том же наэймспейсе.

Естесно я не собираюсь так ее использовать, просто спросил о потенциальной возможности. В самом простом варинате это наверно выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class ClassX
{
public:
	void PrintStr(const char *str) const;
}; 

void ClassX::PrintStr(const char *str) const
{
	printf(str);
}


void main()
{
	ClassX *ptr;

	ptr = NULL;
	ptr->PrintStr("\nIt works anyway!\n");
}
...
Рейтинг: 0 / 0
не знал что так
    #34710010
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tubrik Akh Tubrikвроде понял, так стало быть можно метод любого класса вызвать, который обрабатывает данные переданные через параметры и не обращается к полям свого класса?

По своей сути, это уже не метод, а функция. Для того, чтобы не загромаждать класс, ее желательно выносить из класса, оставляя в том же наэймспейсе.

Естесно я не собираюсь так ее использовать, просто спросил о потенциальной возможности. В самом простом варинате это наверно выглядит так:


Да, я понЯл... Не забудь подумать, надо ли загромождать класс этой функцией?
...
Рейтинг: 0 / 0
не знал что так
    #34710044
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверно не надо)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / не знал что так
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]