Форум программистов, компьютерный форум CyberForum.ru

Делегирующие конструкторы и наследование - C++

Восстановить пароль Регистрация
 
zhdv06
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 9
11.04.2016, 19:50     Делегирующие конструкторы и наследование #1
Возможно ли использовать делегирующие конструкторы когда нужно инициализировать базовый класс?
Например есть два таких конструктора:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
ComPortSettings::ComPortSettings(QWidget *parent) :
    QComboBox(parent)
{
    // init();
}
 
ComPortSettings::ComPortSettings(const QString &title, QWidget *parent) :
    QComboBox(title, parent)
{
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2016, 19:50     Делегирующие конструкторы и наследование
Посмотрите здесь:

конструкторы C++
C++ конструкторы
C++ Наследование, конструкторы
C++ наследование. конструкторы
Конструкторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
11.04.2016, 19:56     Делегирующие конструкторы и наследование #2
Цитата Сообщение от zhdv06 Посмотреть сообщение
Возможно ли использовать делегирующие конструкторы когда нужно инициализировать базовый класс?
Возможно. И даже очень удобно и полезно.
zhdv06
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 9
12.04.2016, 10:14  [ТС]     Делегирующие конструкторы и наследование #3
castaway, покажи пример пожалуйста.
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
12.04.2016, 18:51     Делегирующие конструкторы и наследование #4
Так вы же сами привели пример делегирования. Объект QComboBox инициализируется при создании объекта ComPortSetting.
zhdv06
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 9
12.04.2016, 19:24  [ТС]     Делегирующие конструкторы и наследование #5
Я имел ввиду новое средство С++11 - делегирующий конструктор.
Любой конструктор может вызвать любой другой перегруженный конструктор данного класса отличный от самого себя.

Например:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Rectangle
{
public:
    Rectangle(size_t width, size_t height):
        m_Width(width),
        m_Height(height)
    {
        std::cout << "Target ctor\n";
    }
    Rectangle(size_t width):
        Rectangle(width, width)
    {
        std::cout << "Delegate ctor\n";
    }
private:
    size_t m_Width;
    size_t m_Height;
};
Когда класс сам по себе, тогда все понятно как использовать.
Но когда производный класс вызывает конструктор базового, вот тут не понимаю как написать.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
ComPortSettings::ComPortSettings(QWidget *parent) :
    QComboBox(parent)
{
    // init();
}
 
ComPortSettings::ComPortSettings(const QString &title, QWidget *parent) :
    QComboBox(title, parent)
{
}
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
12.04.2016, 19:36     Делегирующие конструкторы и наследование #6
Насколько мне известно, делегирующий конструктор не имеет отношения к механизму наследования.
Пример делегирования:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
struct A {
    A() : A( 123 ) { std::cout << "A::A()\n"; }
    A( int i ) { std::cout << "A::A( " << i << " )\n"; }
};
 
int main() {
    A a;
}
У вас в последнем примере просто список инициализации конструктора.
zhdv06
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 9
12.04.2016, 19:48  [ТС]     Делегирующие конструкторы и наследование #7
Если я напишу примерно так:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
// 1
ComPortSettings::ComPortSettings(QWidget *parent) :
    QComboBox(parent)
{
    // init();
}
// 2 
ComPortSettings::ComPortSettings(const QString &title, QWidget *parent) :
    ComPortSettings(parent), QComboBox(title, parent)
{
}
При вызове 2-го конструктора он вызовет 1-й.
1-й вызовет конструктор базового класса.
После окончания работы 1-го 2-й тоже вызовет конструктор базового класса.
И что здесь получится?
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
12.04.2016, 20:01     Делегирующие конструкторы и наследование #8
Цитата Сообщение от zhdv06 Посмотреть сообщение
И что здесь получится?
Получится фигня, но ваш изначальный вопрос звучал по-другому.
zhdv06
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 9
13.04.2016, 05:04  [ТС]     Делегирующие конструкторы и наследование #9
Возможно я неправильно сформулировал свой вопрос.

Как использовать это?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
// 1
ComPortSettings::ComPortSettings(QWidget *parent) :
    QComboBox(parent)
{
    // init();
}
// 2 
ComPortSettings::ComPortSettings(const QString &title, QWidget *parent) :
    ComPortSettings(parent), QComboBox(title, parent)
{
}
Usaga
 Аватар для Usaga
887 / 678 / 135
Регистрация: 21.01.2016
Сообщений: 2,470
Завершенные тесты: 2
13.04.2016, 07:34     Делегирующие конструкторы и наследование #10
zhdv06, ни как. Такой код не скомпилируется, ибо не допускается делегирование более чем одному конструктору.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2016, 18:44     Делегирующие конструкторы и наследование
Еще ссылки по теме:

C++ Конструкторы
C++ Наследование классов и конструкторы
C++ Конструкторы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zhdv06
0 / 0 / 0
Регистрация: 07.12.2014
Сообщений: 9
13.04.2016, 18:44  [ТС]     Делегирующие конструкторы и наследование #11
Я получил от вас подтверждение что такой код работать не будет.
Тема исчерпана.
Спасибо за ответы.
Yandex
Объявления
13.04.2016, 18:44     Делегирующие конструкторы и наследование
Ответ Создать тему
Опции темы

Текущее время: 11:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru