Обращение к статическим функциям-членам из родительского класса
От: Udzhen Россия  
Дата: 31.08.13 18:43
Оценка:
Всем, здравствуйте!
Собственно вопрос скорее не технического, а эстетического характера.
Меня интересует практика хорошего тона обращения к статическим функциям-членам из класса в котором они определены.

В случае обращения из вне, все понятно. Объявляем имя класса со спецификатором принадлежности, а далее следует сам метод:

QApplication::aboutQt();


Однако, из класса в котором определен этот самый метод, к нему можно обратится несколькими способами:

1) aboutQt();
2) ::aboutQt();
3) QApplication::aboutQt()

;

Какой вариант по Вашему мнению наиболее предпочтителен?
Есть ли какие либо технические тонкости при различном обращении?
----------------------
С уважением, Евгений.
Re: Обращение к статическим функциям-членам из родительского класса
От: _niko_ Россия  
Дата: 31.08.13 19:08
Оценка: 42 (4) +1
Здравствуйте, 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
Re[2]: Обращение к статическим функциям-членам из родительского класса
От: iEvgeny Россия  
Дата: 31.08.13 19:24
Оценка:
__>Результат:
__>My1Aplication::foo
__>-------------------
__>My1Aplication::aboutQt
__>aboutQt
__>QApplication::aboutQt

__>My2Aplication::foo
__>-------------------
__>QApplication::aboutQt
__>aboutQt
__>QApplication::aboutQt
__>



Превосходно!
Как и все очевидное, ответ лежит на поверхности, но не так то просто его увидеть без таких людей как Вы!
Благодарю за развернутый ответ.
----------------------
С уважением, Евгений.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.