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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
#1

Наследование в C++, или болезненный переход с Java - C++

10.01.2013, 12:14. Просмотров 591. Ответов 11
Метки нет (Все метки)

Здравствуйте!
Есть такая задача: нужно два класса, две разные реализации абстрактного родительского(т.е. в нём только объявление функций).
Вопрос: Если так сделать то можно будет из экземпляра родительского класса обращаться к функциям дочернего класса?
Пример: Класс игрока, и два подкласса: ИИ и пользователь.
Если время есть, то пожалуйста с примером.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 12:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование в C++, или болезненный переход с Java (C++):

Переход с Java на С++ - C++
Доброго времени суток, я хотел узнать как можно переписать сервер LineAge II Java на С++. Кратко о сути проблемы (возможно это не...

Наследование от 2Д или 3Д фигур - C++
Была задана задача: создать абстрактный класс Shape (фигура) с вычислением характеристики любой фигуры (площадь или объем) и выводом...

Наследование или создание класса в классе? - C++
У меня есть класс А и класс Б. В классе А я хочу создать объекты класса Б. Как лучше это сделать? Или лучше использовать наследование?

Имеет ли смысл продолжать учить с++ или попробовать перейти в с# или java? - C++
Надеюсь данный вопрос не нарушает правила этого раздела. Учу кресты уже месяца полтора-два. Это мой первый ЯП. По 2-7 часов в день. В...

Структура программы или наследование, без использования конструктора базового класса - C++
Всем доброго времени суток. Снова прошу вас о помощи! Код располагается по ссылке в спойлере - не вставлю сюда, так как слишком...

Заменить наследование классов на наследование интерфейсов - C++
#include <iostream> #include <assert.h> using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

11
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
10.01.2013, 13:14 #2
Anion,
Вопрос: Если так сделать то можно будет из экземпляра родительского класса обращаться к функциям дочернего класса?
Конкретнее можно? Это имеется ввиду?

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
35
36
37
38
39
#include <iostream>
 
class Player
{
public:
   virtual ~Player() { }
   void start() const
   {
      call();
   }
private:
   virtual void call() const = 0;
};
 
class UserPlayer : public Player
{
   void call() const
   {
      std::cout << "UserPlayer called" << std::endl;
   }
};
 
class CPUPlayer : public Player
{
   void call() const
   {
      std::cout << "CPUPlayer called" << std::endl;
   }
};
 
int main()
{
   Player* p = new UserPlayer();
   p->start();
   delete p;
   p = new CPUPlayer();
   p->start();
   delete p;
}
1
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
10.01.2013, 13:17 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class gamer
{
public:
    std::string get_name(void) {return name;}
    virtual bool do_something(void) = 0;
 
private:
    std::string name;
};
class ai: public gamer
{
public:
    virtual bool do_something(void) {return get_name() == "ai";}
};
class user: public gamer
{
public:
    virtual bool do_something(void) {return get_name() == "user";}
};
1
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.01.2013, 13:23 #4
из экземпляра родительского класса обращаться к функциям дочернего класса?
а напишите код на java не исользуя static как вы себе это представляете? как класс родителя может знать о чем то что есть у его предков, тогда нарушается весь принцип наследования
0
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
10.01.2013, 14:29  [ТС] #5
Цитата Сообщение от Nixy Посмотреть сообщение
а напишите код на java не исользуя static как вы себе это представляете? как класс родителя может знать о чем то что есть у его предков, тогда нарушается весь принцип наследования
Окей. Скажу по другому: вызов перегруженных потомком функций из экземпляра род. класса.

На java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Par {
  void method() {System.out.println("Parent");}
}
 
class Daugh extends Par {
  void method() {System.out.println("Daughter");}
}
 
class Son {
  void method() {System.out.println("Son");}
}
 
class main() {
  Par parent = new Par();
  Par daughter = new Daught();
  Par son = new Son();
  parent.method();
  daughter.method();
  son.method();
}
ForEveR, Спасибо! Скорее всего оно))... А обязательно виртуальные методы делать? Перегрузкой нельзя обойтись?
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.01.2013, 14:36 #6
Цитата Сообщение от Anion Посмотреть сообщение
вызов перегруженных потомком функций из экземпляра род. класса.
а это везде где ООП есть доступно,и оба ответа содержат в себе это
0
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
10.01.2013, 14:44  [ТС] #7
Компилируемо:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Par {
  void method() {System.out.println("Parent");}
}
 
class Daugh extends Par {
  void method() {System.out.println("Daughter");}
}
 
class Son extends Par {
  void method() {System.out.println("Son");}
}
 
class Main {
    public static void main(String args[]) {
      Par parent = new Par();
      Par daughter = new Daugh();
      Par son = new Son();
      parent.method();
      daughter.method();
      son.method();
    }
}
Добавлено через 2 минуты
Цитата Сообщение от Nixy Посмотреть сообщение
а это везде где ООП есть доступно,и оба ответа содержат в себе это
Мне нужен был пример... ммм... присвоения екземпляру родителя класс потомка, и использование из экземпляра родителя методов именно потомка.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
10.01.2013, 14:48 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Par {
  virtual void method() {std::cout << "Parent" << std::endl;}
}
 
class Daugh : public Par {
  void method() {std::cout << "Daughter" << std::endl;}
}
 
class Son : public Par {
  void method() {std::cout << "Son" << std::endl;}
}
 
int main() {
      Par* parent = new Par();
      Par* daughter = new Daugh();
      Par* son = new Son();
      parent->method();
      daughter->method();
      son->method();
      delete parent;
      delete daughter;
      delete son;
}
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
10.01.2013, 15:00 #9
ForEveR, отсутствие слова виртуал напротив методов производных классов не меняет того факта что они все равно виртуальные. эстетика разве. но скорее - введение в заблуждение.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
10.01.2013, 15:04 #10
vxg, М. Я не вижу особого смысла писать virtual в методах производных классов и обычно не пишу. Это не является вводом в заблуждение для программиста на С++. А то что они являются виртуальными - ясен пень.
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
10.01.2013, 15:17 #11
Цитата Сообщение от ForEveR Посмотреть сообщение
ясен пень
просто ТС вопрошал можно ли обойтись без виртуальных методов одной перегрузкой и у него могло создасться впечатление, что показанный пример как раз содержит решение в интересующем его ключе, а на деле - это то же самое
0
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
10.01.2013, 18:06  [ТС] #12
Почитал статью: Виртуальные функции в C++.

Добавлено через 28 минут
Не дописал месседж.
В общем вроде всё понял.
0
10.01.2013, 18:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2013, 18:06
Привет! Вот еще темы с ответами:

vector<Struct2{int,vector<struct1>}> или множественное наследование ... - C++
Здравствуйте! Помогите, пожалуйста. Есть такие данные: typedef struct { int x; int y; // координаты...

C++ или Java? - C++
Доброго времени суток, уважаемые форумчане! Передо мной стал вопрос: учить C++ или Java? Для меня самое главное - это возможности и...

c++, java, или - C++
есть ли какой-нибудь язык программирования который прост для начинающих, но если его хорошо изучить можно было бы и mmorpg сделать?

C++ или Java - C++
Извиняюсь что тут пиши просто не знаю где это лучше всего написать. Я начинающий программист хочу научиться программировать только не знаю...


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

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

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