Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Порядок построения классов

Ответить
Настройки темы
C/C++ - Порядок построения классов
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Где можно почитать про порядок построения классов (с виртуальными функциями)? Пример:
Код: Выделить весь код
struct A
{
  virtual void foo() {cout << "A::foo()\n";}
}

struct C
{
  C(A& a) {a.foo();}
}

struct B : A, C
{
  B() : A(), C(*this)
  {
  }

  void foo() {cout << "B::foo()\n";}
}
что по правилам должно появиться на экране, A::foo(), B::foo() или какая-нить ошибка, что класс недостроен?

Отправлено: 09:20, 18-03-2009

 

Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


Тогда я чтото не пойму :
Код: Выделить весь код
struct A
{
  virtual void foo() {cout << "A::foo()\n";}
}

struct C
{
  C(A& a) {a.foo();}
}

struct B : A, C
{
  B() : A(), C(*this)
  {
  }

  void foo() {cout << "B::foo()\n";}
}
По каким критериям он не достроен и одновременно с реализацией. По-моему вполне достроен и реализован.

Отправлено: 18:03, 22-03-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


В конструктор C передаётся часть недостроенного класса B с собственной реализацией виртуальных функций (*this)

Отправлено: 07:37, 23-03-2009 | #12


Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


В конструкторе передается не сам не достроенный объект а его указатель типа B. В самое классе C он преобразуется в класс A (он же подкласс его) что дает a.foo() корректно. Вот вопрос что будет если сделать так C(B& b) {b.foo();} - надо будет дома проверить

Отправлено: 07:50, 23-03-2009 | #13

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата Alan85:
если сделать так C(B& b) {b.foo();} »
С этим как раз понятно, в лучшем случае слетит ибо используем неинициализированную память с мусором.
Цитата Alan85:
(он же подкласс его) что дает a.foo() корректно »
a.foo() - виртуальным метод, имеющий реализации A::foo() и B::foo(). Например:
Код: Выделить весь код
struct A
{
  virtual void foo() {cout << "A::foo()\n";}
};

struct C
{
  C(A& a) {test(a);}

  void test(A& a) 
  {
     clog << "C::test with &a=" << &a << ", this=" << this << "\n";
     a.foo();
  }
};

struct B : A, C
{
  B() : A(), C(*this)
  {
     test(*this);
  }

  void foo() {cout << "B::foo()\n";}
};
С одними и теми же исходными данными получаем разный результат. Потому что первый раз вызов C::test произойдёт когда формально B ещё не достроен
Код: Выделить весь код
C::test with &a=1245060, this=1245064
A::foo()
C::test with &a=1245060, this=1245064
B::foo()
Это особенность компилятора или стандарт с++ такой?

Отправлено: 14:36, 23-03-2009 | #14



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Порядок построения классов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Php. Поиск документации для начинающих по использованию классов. BarsMaster Вебмастеру 5 10-01-2007 21:44
[решено] Разукрашивание сайтов по-своему, подменой CSS и Классов hasherfrog Вебмастеру 16 20-10-2006 01:21
Не совсем стандартное решение построения LAN. LEXX2002 Сетевые технологии 4 14-03-2005 21:18
Reverse ingineering классов (обратно UML-диаграмме) djogik Программирование и базы данных 1 12-01-2005 21:29
Программа для построения графиков функций Sherla Программное обеспечение Windows 10 25-04-2004 19:20




 
Переход