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

Наследуются ли конструкторы и деструкторы? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Отсылка межпроцессовых сообщений http://www.cyberforum.ru/cpp-beginners/thread37857.html
Есть два процесса основной и дочерний, как дочернему отправить сообщение, точнее даже вопрос не как отправить, а как получить, вот отправлять пытаюсь так STARTUPINFO sic; ZeroMemory (&sic, sizeof(sic)); sic.cb = sizeof(sic); LPCSTR t = "hi"; LPCSTR name = "Slave"; UINT msg = RegisterWindowMessage(t); ...
C++ Класс TPlane, описывающий плоскость в пространстве Собственно само задание: переписать программу, используя новые знания о классах и перезагрузке операций. Использовать динамическое выделение памяти под создаваемый объект. Класс TPlane, описывающий плоскость в пространстве, проходящую через 3 точки. Есть возможность вычислять положение точки на плоскости по заданным 2-м координатам, пересечение плоскости с прямой, а так же вычислять... http://www.cyberforum.ru/cpp-beginners/thread37856.html
Полиморфизм своими словами C++
Дайте определения полиморфизма своими слова. А так же примерчик, который ярко выражает полиморфизм. Спасибо.
c++ C++
Что значит строки v_arr(arr, N); w_arr(arr, N);
C++ Проблемы с sort() http://www.cyberforum.ru/cpp-beginners/thread37844.html
В #include "stdafx.h" #include <iostream> #include <ctime> #include <algorithm> using namespace std; void out(int *a,int n,int k); void vin(int *a,int n); void copt(int *a,int n,int k); bool my (int i,int j) { return (i<j); }
C++ Генератор случайных чисел в интервале (0;10) Как сгенерировать случайную последовательность целых чисел лежащих в интервале то 0 до 10? Т.е. как задать границы для генерации ПСЧ. подробнее

Показать сообщение отдельно
xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
13.01.2016, 18:44     Наследуются ли конструкторы и деструкторы?
Для начала нужно понять, о каком конструкторе идёт речь.

Компилятор может генерировать конструкторы автоматически, например, конструктор по умолчанию. Если он генерирует конструктор по умолчанию для производного класса, то он сам вставит вызов конструктора базового класса. Это можно легко увидеть, выполнив такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class A {
 public:
    A() {
        std::cout << "A::A()\n";
    }
};
 
class B : public A {
};
 
int main() {
    B b;
    return 0;
}
Если же речь идёт о конструкторе, который не генерируется компилятором автоматически, то вызов конструкторов базового класса - ответственность программиста. Например, следующий код не будет скомпилирован:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class A {
 public:
    explicit A(int v) {
        std::cout << "A::A(" << v << ")\n";
    }
};
 
class B : public A {
};
 
int main() {
    B b(2);
    return 0;
}
Это и означает, что конструкторы не наследуются. Однако, для достижения некоторого "наследования" конструкторов есть два способа. Первый, соответствующий стандарту C++03:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
class A {
 public:
    explicit A(int v) {
        std::cout << "A::A(" << v << ")\n";
    }
};
 
class B : public A {
 public:
    B(int v) : A(v) {
    }
};
 
int main() {
    B b(2);
    return 0;
}
Здесь мы явно вызываем конструктор базового класса в списке инициализации производного класса.

Второй способ, который соответствует стандарту C++11:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
class A {
 public:
    explicit A(int v) {
        std::cout << "A::A(" << v << ")\n";
    }
};
 
class B : public A {
 public:
    using A::A;
};
 
int main() {
    B b(2);
    return 0;
}
Здесь мы явно говорим, что необходимо унаследовать конструкторы базового класса A.
 
Текущее время: 23:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru