Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
ritmix10
2 / 2 / 0
Регистрация: 04.02.2013
Сообщений: 92
1

Наследование: почему вызывается метод базового класса, а не производного?

20.06.2015, 16:05. Просмотров 1034. Ответов 3
Метки нет (Все метки)

Всем привет, такой вопрос, почему вызывается в данном коде метод базового класса, а не производного (без указания ключевого слова virtual для func)
C++
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
class A
{
public:
    A() { cout << "create A" << endl; };
    ~A() { cout << "delete A" << endl; };
     void func(){ cout << "func A" << endl; };
 
private:
 
};
 
class B :public A
{
public:
    B() { cout << "create B" << endl; };
    ~B() { cout << "delete B" << endl; };
     void func(){ cout << "func B" << endl; };
 
private:
 
};
 
 
void main()
{
 
    A *a_ptr = new A;
    B b;
 
    a_ptr = &b;
 
    a_ptr->func();
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2015, 16:05
Ответы с готовыми решениями:

Почему объект производного класса не видит префиксный оператор из базового класса?
Короче создал я базовый класс с перегруженным префиксным оператором ++. Потом...

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать...

Как сложить объект базового класса с объектом производного(наследуемого класса)
Как умножить объект базового класса с объектом производного(наследуемого...

Указатель на объект базового класса и адрес объекта производного класса
Пример кода: class Class1 { public: Class1(int x) { j = new int;...

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс...

3
hoggy
Заблокирован
Эксперт С++
20.06.2015, 16:14 2
Лучший ответ Сообщение было отмечено Ilot как решение

Решение

Цитата Сообщение от ritmix10 Посмотреть сообщение
почему вызывается в данном коде метод базового класса, а не производного (без указания ключевого слова virtual для func)
потому что метод не виртуальной.
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
20.06.2015, 20:16 3
Лучший ответ Сообщение было отмечено Ilot как решение

Решение

Цитата Сообщение от ritmix10 Посмотреть сообщение
без указания ключевого слова virtual для func
Неужели сам не смог догадаться, раз такие пояснения даешь?

virtual для функций указывается как раз для того, чтобы выбор функции осуществлялся в динамике (в процессе выполнения программы), иначе - функция выбирается на основании статического типа указателя/ссылки.
В твоем случае вызывается функция для указателя, который имеет тип A* (строка 27). Стало быть и функция будет вызвана для этого же класса, а не из производного, на который фактически указывает указатель (строка 30).

Не по теме:

P.S. А ещё у тебя в коде утечка памяти.

0
DrOffset
22.06.2015, 23:15     Наследование: почему вызывается метод базового класса, а не производного?
  #4
 Комментарий модератора 
В этой теме располагаются ответы, согласно заданному вопросу. Обсуждение утечек памяти здесь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2015, 23:15
Привет! Вот еще темы с ответами:

Создание указателя типа базового класса на экземпляр производного класса
Добрый день! Иногда видел коды, где создавался указатель типа базового класса...

Определить обработчик исключений на преобразование указателя базового класса на указатель производного класса
Класс В является производным от класса А. Определить обработчик исключительной...

Вызов объектом базового класса функцию из производного класса!
Как можно осуществить вызов или передачу значения в базовый класс для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru