|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Порядок построения классов |
|
|
C/C++ - Порядок построения классов
|
Ветеран Сообщения: 1180 |
Профиль | Отправить PM | Цитировать Где можно почитать про порядок построения классов (с виртуальными функциями)? Пример:
что по правилам должно появиться на экране, A::foo(), B::foo() или какая-нить ошибка, что класс недостроен? |
|
Отправлено: 09:20, 18-03-2009 |
Забанен Сообщения: 463
|
Цитата pva:
и объявление класса должно быть начинатся с class <name> . Почитать можно в любой более менее нормальной книге по Си++ . Ну а про классы в своей библиотеке нашел "Павловская Т. C++ Объектно-ориентировочное программирование. Практикум" |
|
Отправлено: 19:16, 18-03-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата Alan85:
Методы, реализованные в описании раскрываются inline когда могут (если не могут, то не inline) Цитата Alan85:
Цитата Alan85:
|
|||
Отправлено: 07:34, 19-03-2009 | #3 |
Забанен Сообщения: 463
|
Цитата pva:
Где скачать не знаю, я двд с книгами заказал - куча чего полезного и интересного. |
|
Отправлено: 08:36, 19-03-2009 | #4 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата Alan85:
вполне собирается любым компилятором C++. Ссылку на книжку не пока могу дать Более того, даже int есть класс, а у него даже и методов то нет... |
||
Отправлено: 10:18, 19-03-2009 | #5 |
Забанен Сообщения: 463
|
да, извини, согласен - давно классами в сях не баловался. А верхний пример будет откомпилирован и выведет A::foo(), B::foo() если немного подправить синтаксис (точки с запетой между реализациями). Только хоть используй virtual тут хоть нет - результат тот же.
|
Отправлено: 19:25, 19-03-2009 | #6 |
Забанен Сообщения: 463
|
а тут слово virtual имеет значение. Тут типичный случай полиморфизма - объект A подменяет свои виртуальные функции функциями из объекта B.
|
Отправлено: 19:50, 19-03-2009 | #7 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата Alan85:
#include <iostream> using namespace std; class A { public: void foo() {cout << "A::foo()\n";} // функция test_foo не знает, какой именно класс передан аргументом. // она просто получила некоторый интерфейс, одинаковый для всех наследников friend test_foo(A& a) {a.foo();} } ; class C { public: C(A& a) {a.foo();} } ; class B : A, C { public: B() : A(), C(*this){/**/} void foo() {cout << "B::foo()\n";} } ; main() { A a; B b; test_foo(a); // вызов одной функции с разными реализациями foo() test_foo(b); cin.get(); } Цитата Alan85:
Цитата Alan85:
struct B : A, C { // порядок вызова: // 1. A::A() // 2 С::C(A&) - подкласс A уже построен, но B:A,C ещё нет // 3 тело B::B() B() : A(), C(*this) { } void foo() {cout << "B::foo()\n";} } ~либо~ Верно ли что использовать недостроенные классы категорически нельзя, реализация поведения остаётся на усмотрение компилятора. Я ни того, ни другого утверждения ещё не встречал |
|||
Отправлено: 22:29, 20-03-2009 | #8 |
Забанен Сообщения: 463
|
Цитата pva:
То тогда вылетит со свистом так как в в конструкторе C(A& a) {a.foo();} передается B которое еще не создано (после C будет ) что значит B::foot() еще неизвестно (не построена таблица виртуальных функций). Но стоит только заменить класс A обратно с реализацией функции (она сразу вносится в таблицу виртуальных функций) все отлично - C(A& a) {a.foo();} хоть и принимает B но в таблице не найдя для нее реализации B::foo() передает выше - A::foo(). Я не утверждаю что это истина и верно на всех компиляторах хотя логически должно. |
|
Отправлено: 23:25, 20-03-2009 | #9 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата Alan85:
|
|
Отправлено: 17:44, 22-03-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|