Форум программистов, компьютерный форум 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
06.12.2013, 20:43     Наследуются ли конструкторы и деструкторы?
Цитата Сообщение от CheshireCat Посмотреть сообщение
Неверно. Конструкторы и деструкторы не наследуются.
Не совсем так. Конструкторы не наследуются, так как не являются членами интерфейса класса, в некотором смысле (sic!) исключение составляет конструктор по умолчанию, который и был упомянут выше. В этом случае перед вызовом конструктора по умолчанию наследника вызывается конструктор по умолчанию родительского объекта для наследника. Однако конструктор с нетривиальным списком аргументов унаследован быть не может. Пример:

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
class A
{
    public:
        int v;
        A(int _v) :
        v(_v)
        {
        }
};
 
class B : public A
{
    public:
        B(int _v) : A(_v)
        {
 
        }
};
 
int main()
{
    B b(2);
    std::cout << b.v << "\n";
}
В этом случае определён конструктор наследника, который перед выполнением вызывает конструктор родителя. Получается цепочка, то есть, если у наследника есть ещё наследники (назовём их внуками), то во внуках достаточно будет сослаться на конструктор наследника, который позовёт конструктор родителя.

P.S. Вообще, даже в куда "более объектно-ориентированных" языках (C#, Java) проблема с наследованием конструкторов так же не решена, так что полагаться на введение наследования конструкторов в стандарт в обозримом будущем не стоит, ИМХО.
 
Текущее время: 05:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru