powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Высвобождение ресурсов
8 сообщений из 33, страница 2 из 2
Высвобождение ресурсов
    #32425014
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А за каким таким мне надо наследовать конструктор базового класса в C++? Он (его default разновидность) неявно вызывается при попытке создания инстанса производного класса, хотя вы можете делать это и явно. Поэтому логика такая - базовый класс инициализирует protected members, а производный класс наследует их, а не весь конструктор целиком, что есть глубоко правильно. Так что с точки зрения ANSI C++ код

class base
{
public:
base(int a){}
};
class derived: public base
{
public:
};

void main(void)
{
derived drv = new derived(10);
}

таки должен компилиться, если его переписать так (нормальный default constructor)

class base
{
int secret;
public:
base(int a = 10){}
};

base::base(int a)
{
secret = a;
}

class derived: public base
{
public:
};

void main(void)
{
derived drv();
}

а derived() компайлер сам напишет за Вас.

Теперь всем адептам RAD средств (C#, Java, Delphi, etc..), особенно тем из них, кого тошнит от C++ - не путайте божий дар с яичницей. C/C++ - это то, на чём пишут ОС (UNIX, Windows), драйвера устройств, сервера баз данных, серьёзную матеатику и проч. Да, это pain in the ass, писать GUI даже на SDK без MFC поддержки. Ну так и пишите себе на здоровье, хоть на C#, хоть на VB.Net, хоть на Delphi, но не трогайте своими GUIшными руками святого.
...
Рейтинг: 0 / 0
Высвобождение ресурсов
    #32425710
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА за каким таким мне надо наследовать конструктор базового класса в C++?

Один минус в ненаследовании конструкторов (как мне кажется) , попробую рассуждать логически: если конструктор не наследуется, значит не наследуется программный код этого конструктора. В таком случае, все производные классы нуждаются в коде родителя, иначе нельзя будет скомпилить(выполнить) код потомка, т.е. код потомка несамодостаточен. Значит всегда нужно за собой "таскать" код родителя.

Поэтому, если в Delphi конструктор наследуется, действительно ли можно обойтись без базового класса?

Какие есть мысли по этому поводу?
...
Рейтинг: 0 / 0
Высвобождение ресурсов
    #32425774
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softbuilder@inbox.ru

Это какой код предка надо переновить в потомка? Ничего переносить не надо - вот такой код будет работать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class base 
{ 
public: 
base(int a){} 
}; 
class derived: public base 
{ 
public: 
   derived(int a): base(a){}
}; 

void main(void) 
{ 
derived drv = new derived( 10 ); 
} 
...
Рейтинг: 0 / 0
Высвобождение ресурсов
    #32425799
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду двоичный код, который при компиляции получается.

В твоём примере, если всё будет находится в одной DLL - понятно что будет всё работать.

Представь, что у тебя есть DLL c кодом родителя, ты компилишь DLL с кодом потомка, указав связь с DLL родителя. Всё нормально компилится. Теперь DLL родителя удаляем. Далее ты пишешь программу где создаёшь экземпляр потомка. Что получаем? Так как конструктор не наследуется и DLL родителя нет, что произойдет при вызовк base()? Подозреваю, что ошибка. Вот об этом и речь.

А в случае Delphi, как я понимаю этого не произойдёт.
...
Рейтинг: 0 / 0
Высвобождение ресурсов
    #32425910
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет - это произойдет в любом случае - ни фига себе - убить код предка и ожидать нормальной работы!! Наследование - это же не copy&paste
...
Рейтинг: 0 / 0
Высвобождение ресурсов
    #32426015
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот-вот. Поэтому интересно, в Delphi также? Если в Delphi также, то какой прок от наследования конструкторов, непонятно.
...
Рейтинг: 0 / 0
Высвобождение ресурсов
    #32426186
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то какой прок от наследования конструкторов

По-мойму, это типично RAD-овская "фича"... (чтобы "пальцами меньше по клаве стучать"), вспомните VFP, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
DEFINE CLASS myBase AS CUSTOM
	
	PROCEDURE Init
		* Any difficult initialization tasks...
	ENDPROC

ENDDEF

DEFINE CLASS myInheritance AS myBase
	
	* PROCEDURE Init
		* Any difficult initialization tasks...
	* ENDPROC
	* It's implied to be done by itself...

	PROCEDURE SomeWhatElse
		* Another difficult tasks...
	ENDPROC

ENDDEF


А при создании С#, соответственно, не "пошли на поводу" у человеческой лени, а решили сделать код более "структурированным" и "организованным" (ИМХО).
...
Рейтинг: 0 / 0
Высвобождение ресурсов
    #32426896
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Солидарен с funikovjuri - если бинарный код предка недоступен, обязательно произойдёт ошибка или на этапе линкирования (в лучшем случае) или на этапе выполнения. Чудес не бывает...
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Высвобождение ресурсов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]