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