2 / 2 / 1
Регистрация: 30.05.2013
Сообщений: 339
1

наследование

04.03.2015, 15:03. Показов 369. Ответов 4
Метки нет (Все метки)

добрый день, вопрос в следующем :


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
#include <iostream> 
using namespace std; 
 
class A{ 
public:     
    int foo(){ return 1; } 
}; 
class B: public A{ 
public:     
    virtual int foo(){ return 2; } 
}; 
class C: public B{ 
public:     
    int foo(){ return 3; } 
}; 
 
int main() {  
    A* obj = new C; 
     
    cout << obj->foo(); 
    cout << ((B*)obj)->foo(); 
    cout << ((C*)obj)->foo(); 
    
    return 0;  
}

почему будет выведено 133 а не 333? Заранее спасибо

Добавлено через 3 минуты
и так же почему не будет выведено ничего в с этом коде:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream> 
using namespace std; 
 
class Base { 
    public: 
        void method(){}; 
}; 
 
class Child : public Base { 
    public: 
        void method() { cout << "Child"; }; 
}; 
 
int main() 
{ 
    Base* base = new Child(); 
    base->method();    
    return 0;  
}
Добавлено через 2 минуты
ответ найден здесь по последнему вопросу http://wincode.org/tip/method-calling-base-pointer
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2015, 15:03
Ответы с готовыми решениями:

Заменить наследование классов на наследование интерфейсов
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int...

С++ Наследование
#include &lt;conio.h&gt; #include &lt;iostream.h&gt; class MyClass { int a; public: ...

Наследование
Нужно создать функцию которая получает в качестве параметра фалимию и ее ищет в динамическом...

наследование
Задача : Базовый класс: class Shape2D { public: Shape2D(); virtual ~ Shape2D();...

4
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
04.03.2015, 15:04 2
Цитата Сообщение от bazelbodayFaron Посмотреть сообщение
и так же почему не будет выведено ничего в с этом коде
Потому что метод method не виртуальный, а т.к. Вы создаете объект через указатель на базовый класс, то будет вызываться метод базового класса. Если в базовом классе метод methodсделать виртуальным, то выведется "Child".
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2015, 15:05 3
Цитата Сообщение от bazelbodayFaron Посмотреть сообщение
почему будет выведено 133 а не 333?
C++
1
2
3
4
A* obj = new C; 
cout << obj->foo(); // в классе A foo не является виртуальной - обычный вызов. "1"
cout << ((B*)obj)->foo(); // в классе B foo - виртуальная, поэтому вызывается ее реализация для C. "3"
cout << ((C*)obj)->foo(); // в классе C foo так же как в B виртуальная (хотя это и не указано явно). "3"
1
Эксперт PHP
3102 / 2587 / 1219
Регистрация: 14.05.2014
Сообщений: 7,231
Записей в блоге: 1
04.03.2015, 15:10 4
Цитата Сообщение от bazelbodayFaron Посмотреть сообщение
ответ найден здесь по последнему вопросу
Таков же и ответ на первый вопрос. Смотрите, в классе А метод foo не виртуальный, поэтому сначала вызывается он как метод базового класса.
1
2 / 2 / 1
Регистрация: 30.05.2013
Сообщений: 339
04.03.2015, 15:16  [ТС] 5
понял, спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2015, 15:16
Помогаю со студенческими работами здесь

Наследование
Реализовать наследование классов квартиры,этаж,подъезд,дом

Наследование
Помогите найти ошибку, уже голову сломал... Вот код: main.cpp #include &quot;header.h&quot; int main()...

наследование
Пытаюсь разобраться в наследовании Есть класс class File { public: struct comp { char...

Наследование
----------------------------------------------------------------------------------------------------...

наследование
определить базовый класс ''точка''. Затем от него определить два произвольных класса...

Наследование
Доброе утро всем. Есть готовая рабочая программа &quot;Студент. Преподаватель. Человек&quot; нужно...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru