Форум программистов, компьютерный форум 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? Т.е. как задать границы для генерации ПСЧ. подробнее

Показать сообщение отдельно
kzru_hunter
 Аватар для kzru_hunter
1084 / 759 / 58
Регистрация: 01.02.2011
Сообщений: 1,771
Записей в блоге: 1
07.02.2016, 09:54     Наследуются ли конструкторы и деструкторы?
Вообщем, mporro правильно писал про наследование.
Объект производного класса, унаследованного от одного какого-нибудь базового класса, содержит неименованный подобъект базового класса.
Объект производного класса, унаследованного от двух базовых классов (множественное наследование), содержит два неименованных подобъекта, относящихся к этим базовым классам.
Получается, такое отношение называется has a (содержит), а не is a (является). Т.е объект производного класса содержит реализацию базового класса при простом наследовании или нескольких базовых классов при множественном наследовании.
Чтобы объект смог достучаться до своих неименованных подобъектов, он должен использовать оператор расширения видимости, например так: объект->Base::f()
Помимо реализации производному классу ещё достаётся и интерфейс базового класса, т.е. интерфейс базового класса переходит в интерфейс САМОГО производного класса (не путать с интерфейсом при обращении к подобъектам). Т.е. если в базовом классе есть метод Base->f(), то в производный класс он перейдёт как Derived->f(). По сути, объект этого производного класса при обращении к f() будет вызывать функцию f() своего подобъекта. Если бы интерфейс функции f() базового класса не унаследовался бы в производный класс, то у нас не было бы возможности вызвать эту функцию через сам объект производного класса derivedObj->f(), но была бы возможность её вызвать через интерфейс его подбъекта derivedObj->подобъект->f(), т.е на C++ было выглядело так: derivedObj->Base::f()
Как раз интерфейс конструктора, деструктора и оператора присваивания не наследуется. А всё из-за того, что компилятор всегда генерирует для производного класса свои версии конструктора, деструктора и копирующего оператора присваивания, даже если они не были определены явно в классе. Т.е. в производном класса всегда имеется интерфейс к своим конструктору, деструктору, копирующему оператору присваивания, из-за чего интерфейс с версиями конструкторов, деструктора и операторов присваивания базового класса не может быть унаследован, т.к. если в производном классе есть функция с тем же именем, что и в базовом, то она перекрывает все функции базового класса с тем же именем в независимости от сигнатуры.
 
Текущее время: 11:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru