Форум программистов, компьютерный форум CyberForum.ru

Виртуальный методы, абстрактный класс. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Variable or field 'set_color' declared void http://www.cyberforum.ru/cpp-beginners/thread453438.html
написал прог из книги вчём проблема ? #include <iostream> #include <msoftcon.h> #include <math.h> void draw_circle(int ,int ,int ); void set_color(color foreground, color background); void set_color(color foreground, color background) { textcolor( static_cast<int>(foreground) ); textbackground( static_cast<int>(background) );
C++ не верно решает Дан массив A размера N и целые числа K и L (1 ≤ K < L ≤ N). Переста- вить в обратном порядке элементы массива, расположенные между эле- ментами AK и AL, не включая эти элементы. #include <iostream> #include <math.h> using namespace std; void main() { const n=10; http://www.cyberforum.ru/cpp-beginners/thread453436.html
Найти номера двух ближайших элементов из этого массива, т. е. элементов с наименьшим модулем разности C++
Дан массив размера N. Найти номера двух ближайших элементов из этого массива (т. е. элементов с наименьшим модулем разности) и вывести эти номера в порядке возрастания.
Преобразование списка. C++
Есть класс, реализующий линейный двухсвязный список. #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; class Element{ public: int Info; Element *Next, *Prev; Element(){
C++ Вывести на экран фамилии и имена трех худших по среднему баллу учеников http://www.cyberforum.ru/cpp-beginners/thread453411.html
задача На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> <Имя> <оценки>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15...
C++ Изменение регистра строки Принимаем строку с клавиатуры. С пом. функции getline(). string clientName; getline(cin,clientName); Необходимо перевести всю строку в нижний регистр, независимо от того какие символы ввел пользователь. Подскажите, пожалуйста. подробнее

Показать сообщение отдельно
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.05.2013, 20:10     Виртуальный методы, абстрактный класс.
akk, вам бы подучить основы, а потом уже приступать к полиморфизму. Никакая память никакими методами не заполняется. Вы полагаете, что каждый объект хранить все методы своего класса? Это неверно. Методы в программе располагаются в единственном экземпляре. Полиморфизм работает благодаря тому, что каждый объект хранит ссылку на таблицу виртуальных методов своего класса. Т.е. в vtable объекта типа ChildClass есть указатели на все виртуальные методы ChildClass, в том числе на те, которых нет в BaseClass. Но если адрес этого объекта присвоен указателю на BaseClass, компилятор просто не знает, что по этому указателю на самом деле лежит объект типа ClassChild с расширенной по отношению к BaseClass таблицей виртуальных методов. Приведение вниз посредством dynamic_cast заставляет компилятор понять, что на самом деле используется vtable класса ChildClass, и позволить нам вызвать методы, добавленные в этом классе.

Код вашего примера не понял, как и вопроса касательно него. В данном случае pointer1 и pointer2 в конечном счёте будут указывать на один и тот же объект типа ChildClass. Если хотите вызывать методы, добавленные в ChildClass, как через pointer1, так и через pointer2 - надо делать приведение вниз.

Добавлено через 6 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
Приведение вниз посредством dynamic_cast заставляет компилятор понять, что на самом деле используется vtable класса ChildClass, и позволить нам вызвать методы, добавленные в этом классе.
Вернее сказать даже не так. dynamic_cast играет роль только во время выполнения. Компилятору наплевать на vtable, ему важно, чтобы тип указателя, через который вызывается метод, содержал этот вызываемый метод.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru