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 и считается ли это хорошим тоном?
Спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 4.6.2012, 20:17
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


1 ) не стоит пользоваться именем "main" - это так, на будущее
2 ) почему указатель "a" использован до объявления ?
3 ) а можно ли делать слоты виртуальными ? Или - какой в этом смысл ?
4 ) "почему при connect вызывается слот класса Main" - слот Add() есть у всех трёх классов. Указывай на здрровье ))

5 ) каждый коннект будет создавать дополнительный вызов слота. Чтобы избежать этого, нужно либо дисконнектить, либо указывать флаг неповторности коннекта

====================

и ещё - расскажи, что ты хочешь сделать ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 27.1.2025, 7:34