Всем, здравствуйте!
Собственно вопрос скорее не технического, а эстетического характера.
Меня интересует практика хорошего тона обращения к статическим функциям-членам из класса в котором они определены.
В случае обращения из вне, все понятно. Объявляем имя класса со спецификатором принадлежности, а далее следует сам метод:
QApplication::aboutQt();
Однако, из класса в котором определен этот самый метод, к нему можно обратится несколькими способами:
1) aboutQt();
2) ::aboutQt();
3) QApplication::aboutQt()
;
Какой вариант по Вашему мнению наиболее предпочтителен?
Есть ли какие либо технические тонкости при различном обращении?
Здравствуйте, Udzhen, Вы писали:
U>U>1) aboutQt();
U>2) ::aboutQt();
U>3) QApplication::aboutQt()
U>
U>;
U>Какой вариант по Вашему мнению наиболее предпочтителен?
В общем случае тот в котором компилятору не придется за тебя додумывать откуда же именно взять вызываемую функцию.
U>Есть ли какие либо технические тонкости при различном обращении?#include <iostream>
void aboutQt()
{
std::cout << __FUNCTION__ << std::endl;
}
class QApplication
{
public:
static void aboutQt()
{
std::cout << __FUNCTION__ << std::endl;
}
};
class My1Aplication : public QApplication
{
public:
static void aboutQt()
{
std::cout << __FUNCTION__ << std::endl;
}
static void foo()
{
std::cout << std::endl << __FUNCTION__ << "\n-------------------\n";
aboutQt();
::aboutQt();
QApplication::aboutQt();
}
};
class My2Aplication : public QApplication
{
public:
static void foo()
{
std::cout << std::endl << __FUNCTION__ << "\n-------------------\n";
aboutQt();
::aboutQt();
QApplication::aboutQt();
}
};
int main()
{
My1Aplication::foo();
My2Aplication::foo();
return 0;
}
Результат:
My1Aplication::foo
-------------------
My1Aplication::aboutQt
aboutQt
QApplication::aboutQt
My2Aplication::foo
-------------------
QApplication::aboutQt
aboutQt
QApplication::aboutQt
__>Результат:__>My1Aplication::foo
__>-------------------
__>My1Aplication::aboutQt
__>aboutQt
__>QApplication::aboutQt
__>My2Aplication::foo
__>-------------------
__>QApplication::aboutQt
__>aboutQt
__>QApplication::aboutQt
__>
Превосходно!
Как и все очевидное, ответ лежит на поверхности, но не так то просто его увидеть без таких людей как Вы!
Благодарю за развернутый ответ.