crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Виртуальные функции и connect
Ponter
  опции профиля:
сообщение 4.6.2012, 15:27
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 4.3.2010
Пользователь №: 1504

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет. Есть код:
class Main
{
    public:
        Main();
    public slots:
        virtual void add() = 0;
};

class A : public Main
{
    public:
        A();
    public slots:
        void add();
};

class B : public Main
{
    public:
        B();
    public slots:
        void add();
};


Далее в некоем классе я пишу:
{
    Main *main = new Main();
    main = a;
    
    connect(this, SIGNAL(sgMainSignal()), main, SLOT(add()));
    
    A *a = new A();
    main = a;
    main->add(); //вызовет судя по виртуальным функциям A->add()
}

И вот тут встает вопрос: почему при connect вызывается слот класса Main, хотя указатель уже указывает на класс A?
Это решается новой записью, т.е.
A *a = new A();
main = a;
connect(this, SIGNAL(sgMainSignal()), main, SLOT(add()));
Но тогда другой вопрос: что будет если при каждой смене указателя (то на А, то на В) буду писать connect и считается ли это хорошим тоном?
Спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.1.2025, 9:20