powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ООП. Какая функция отработает ?
11 сообщений из 11, страница 1 из 1
ООП. Какая функция отработает ?
    #34970763
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс B перекрывает функцию F() класса A
Код: plaintext
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
class A
{
 public:
   A();
   ~A() {};
  void F();

 protected:
  int var_A;
};
//-------------------

class B: public A
{
 public:
   B();
   ~B() {};
  void F();

 protected:
 int var_B;
};
//-------------------

A::A()
{
  var_A =  0 ;
}

void A::F()
{
  ++var_A;
}
//-------------------

B::B(): A()
{
  var_B =  0 ;
}

void B::F()
{
 A::F(); // Сначала родительская

  ++var_B;
}
//-------------------

Теперь где-то в программе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void MyClass::Func()
{
  B *b = new B();

   FFF( (A*) b ); // B приводится к типу A   

...

}

void MyClass::FFF(A *a); 
{
   a->F(); // Какая отработает? Из класса A() или класса B() ??????????? 
}

Собственно ступор у меня вызывает момент, когда класс A() оформлен в одну библиотеку SO/DLL, а класс B() оформлен в другую библиотеку SO/DLL.

MyClass это уже юзерская прога.
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970778
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A::F(). Сделай ее вируальной, будет обрабатываться B::F()
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970789
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, что, если не virtual так не будет ?
Код: plaintext
1.
2.
3.
4.
5.
void B::F()
{
 A::F(); // Сначала родительская

  ++var_B;
}
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970797
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZmeisheА, что, если не virtual так не будет ?
Код: plaintext
1.
2.
3.
4.
5.
void B::F()
{
 A::F(); // Сначала родительская

  ++var_B;
}


Будет если вызывать от указателя на B. В этом месте происходит статический вызов функции.
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970798
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полиморфизм, ферштейн?
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970825
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо.
В А() делаю её virtual

Если в В() напишу так.
void В::F()
{
++var_B;
}

А::F() отработает до B::F() ??? Мне порядок важен.
Особенно после приведения типа (В) к типу (А).
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970848
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmeisheхорошо.
В А() делаю её virtual

Если в В() напишу так.
void В::F()
{
++var_B;
}

А::F() отработает до B::F() ??? Мне порядок важен.
Особенно после приведения типа (В) к типу (А).

Отработает только B::F() и точка! Потому что это результат полиморфизма. Эта функция найдется по виртуальной таблице объекта B, т.к. именно он будет передан в параметре.

Но в функции B::F() у тебя был вызов A::F() - где ты его поставишь это твое дело. Поставил в начале, значит в начале и вызоветься.
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970870
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Это всё понятно.
НЕ понятно, что будет после приведения типов ? Да ещё когда классы в разных библиотеках.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void MyClass::Func()
{
  B *b = new B();

   FFF( (A*) b ); // B приводится к типу A   

...

}

void MyClass::FFF(A *a); 
{
   a->F(); // Какая отработает? Из класса A() или класса B() ??????????? 
}
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34970992
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, разобрался. Действительно virtual.
Подробности
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34971001
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZmeisheВсё, разобрался. Действительно virtual.
Подробности

Я не понятно объяснял?
...
Рейтинг: 0 / 0
ООП. Какая функция отработает ?
    #34971030
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я не понятно понял.
Забыл про раннее и позднее связывание.
Builder отучает думать, а при переходе на Qt неплохо освежить память.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ООП. Какая функция отработает ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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