Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2003-11-09

Re: Новости дискуссионного листа "Программирование. Форум !!!"

Здравствуйте !

> Теперь хочу задать тебе вопрос по синтаксису
> в файле заголовка объявлен ноый класс
> class CInternetSessionEx : public CInternetSession
> {
> CInternetSessionEx(LPCTSTR pstrAgent = NULL,
> DWORD dwContext = 1,
> DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
> LPCTSTR pstrProxyName = NULL,
> LPCTSTR pstrProxyBypass = NULL,
> DWORD dwFlags = 0);
> }
>
> и расписан конструктор есть там еще несколько процедур я их не привожу
>
> В файле реализаиий следующая конструкция
> CInternetSessionEx::CInternetSessionEx(LPCTSTR pstrAgent /*= NULL*/,
> DWORD dwContext /*= 1*/,
> DWORD dwAccessType /*= PRE_CONFIG_INTERNET_ACCESS*/,
> LPCTSTR pstrProxyName /*= NULL*/,
> LPCTSTR pstrProxyBypass /*= NULL*/,
> DWORD dwFlags /*= 0*/)
> : CInternetSession (pstrAgent, dwContext, dwAccessType, pstrProxyName,
> pstrProxyBypass, dwFlags)
> {
> hWnd = 0;
> }
> Если я правильно понял через двое точие происходит вызов конструктора
> базового класса?
>
> Владимир

Ну, да. Обычно для конструкторов с параметрами вызывают конструктор
базового класса.
При множественном наследовании вызывают конструкторы нескольких базовых
классов.

То есть :

class cl1
{
public :
cl1(int a)
{
value_a = a;
}

int value_a;
};

class cl2
{
public :
cl2(int b)
{
value_b = b;
}

int value_b;
};

class cl3 : public cl1, cl2
{
public :
cl3(int a, int b) : cl1(a), cl2(b)
{
}

void print_values()
{
printf( "value_a = %d\n"
"value_b = %d\n", value_a, value_b);
}
};

класс cl3 наследован от cl1 и cl2. Для инициализации переменных можно
написать конструктор,
вызывающий конструкторы базовых классов.

Если потом объявить объект класса и вызвать print_values :

cl3 val(1, 2);
val.print_values();

результат выведется :

value_a = 1
value_b = 2

Но вообще множественное наследование применять обычно не рекомендуется.

Во-первых, при достаточно сложной структуре классов программа становится
менее читабельной,
Во-вторых, в ряде случаев приходится переопределять оператор new для класса,
понаследованного
от более чем одного класса. С операторами присваивания тоже начинается
морока.
Я использовал множественное наследование только один раз в крупном проекте
и, честно говоря,
пожалел об этом.

Vic.

P.S. Народ, присоединяйтесь !

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru

   2003-11-09 21:53:18 (#18468)

Re: Новости дискуссионного листа "Программирование. Форум !!!"

Теперь все понятно.
Собственно там где я брал Visual Studio мне продали комплект из двух
комактов. То ли для удишевления то ли еще по каким причинам. Сразуже после
раскрутки и возникла ситуация с отсутствием MSDN. Теперь все понятно.

Теперь хочу задать тебе вопрос по синтаксису
в файле заголовка объявлен ноый класс
class CInternetSessionEx : public CInternetSession
{
CInternetSessionEx(LPCTSTR pstrAgent = NULL,
DWORD dwContext = 1,
DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,
LPCTSTR pstrProxyName = NULL,
LPCTSTR pstrProxyBypass = NULL,
DWORD dwFlags = 0);
}

и расписан конструктор есть там еще несколько процедур я их не привожу

В файле реализаиий следующая конструкция
CInternetSessionEx::CInternetSessionEx(LPCTSTR pstrAgent /*= NULL*/,
DWORD dwContext /*= 1*/,
DWORD dwAccessType /*= PRE_CONFIG_INTERNET_ACCESS*/,
LPCTSTR pstrProxyName /*= NULL*/,
LPCTSTR pstrProxyBypass /*= NULL*/,
DWORD dwFlags /*= 0*/)
: CInternetSession (pstrAgent, dwContext, dwAccessType, pstrProxyName,
pstrProxyBypass, dwFlags)
{
hWnd = 0;
}
Если я правильно понял через двое точие происходит вызов конструктора
базового класса?

Владимир

-----Original MessageFrom: Victor V. Vakchturov [mailto:forum-moderat***@m*****.ru]
Sent: Sunday, November 09, 2003 12:48 AM
To: comp.soft.prog.prog (1840500)
Subject: Re: Новости дискуссионного листа "Программирование. Форум !!!"

Здравствуйте !

> Спасибо Vic.
> Как то не сработала мысль,что и тут могут надуть.
> Всетаки проясни мне пожалуста ситуацию с MSDN. На моем ПВЭМе она н
> е стоит.На
> сколько я понял необходимо приобрести компакт диски для ее установки?
> Владимир

Ну да. Собственно, MSDN входит в комплект поставки пакета Microsoft Visual
Studio.
Там компактов много. Обычно 6 - я студия была на 6-и компактах.
Сам MSDN - на 3-х, еще на одном - Visual C++, Visual Basic, Visual FoxPro,
Source Safe, а также средства моделирования (Visual Modeler), реинжиринга
(Visual Analyzer),
утилиты всякие, и.т.д. В принципе, для того, чтобы поставить MSDN достаточно
2-х
компактов. На первом копакте основные файлы справки, индекс и каталог с
примерами, на
втором - все остальные справочные файлы. Но третий компакт тоже иногда
требуется - там лежат
статьи, подборка публикаций переодических изданий. Так что если нужен именно
MSDN, то будет
достаточно 3-х компактов. Основные средства разработки Visual Studio лежат
еще на одном.
На остальных 2 - дополнительные утилиты и еще что то (я их не ставил
никогда).

Сейчас все большее распространение получает Visual Studio NET - в этом
пакете свой MSDN.
Суть одна и та же, но MSDN из NET запускается в своей оболочке (MSDN из
Visual Studio 6.0
открывался виндовой программой справки (hh.exe)). Так что, в принципе можно
и NET - овский
MSDN юзать. Можно даже параллельно поставить две студии (6 - ю и NET).

Vic.

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru

   "vlad" 2003-11-09 08:00:26 (#18254)