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

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

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

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

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

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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.01.2013, 13:14     Наследование в C++, или болезненный переход с Java #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;
}
vxg
Модератор
3141 / 1943 / 214
Регистрация: 13.01.2012
Сообщений: 7,436
10.01.2013, 13:17     Наследование в C++, или болезненный переход с Java #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";}
};
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.01.2013, 13:23     Наследование в C++, или болезненный переход с Java #4
из экземпляра родительского класса обращаться к функциям дочернего класса?
а напишите код на java не исользуя static как вы себе это представляете? как класс родителя может знать о чем то что есть у его предков, тогда нарушается весь принцип наследования
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
10.01.2013, 14:29  [ТС]     Наследование в C++, или болезненный переход с Java #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, Спасибо! Скорее всего оно))... А обязательно виртуальные методы делать? Перегрузкой нельзя обойтись?
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.01.2013, 14:36     Наследование в C++, или болезненный переход с Java #6
Цитата Сообщение от Anion Посмотреть сообщение
вызов перегруженных потомком функций из экземпляра род. класса.
а это везде где ООП есть доступно,и оба ответа содержат в себе это
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
10.01.2013, 14:44  [ТС]     Наследование в C++, или болезненный переход с Java #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 Посмотреть сообщение
а это везде где ООП есть доступно,и оба ответа содержат в себе это
Мне нужен был пример... ммм... присвоения екземпляру родителя класс потомка, и использование из экземпляра родителя методов именно потомка.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.01.2013, 14:48     Наследование в C++, или болезненный переход с Java #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;
}
vxg
Модератор
3141 / 1943 / 214
Регистрация: 13.01.2012
Сообщений: 7,436
10.01.2013, 15:00     Наследование в C++, или болезненный переход с Java #9
ForEveR, отсутствие слова виртуал напротив методов производных классов не меняет того факта что они все равно виртуальные. эстетика разве. но скорее - введение в заблуждение.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.01.2013, 15:04     Наследование в C++, или болезненный переход с Java #10
vxg, М. Я не вижу особого смысла писать virtual в методах производных классов и обычно не пишу. Это не является вводом в заблуждение для программиста на С++. А то что они являются виртуальными - ясен пень.
vxg
Модератор
3141 / 1943 / 214
Регистрация: 13.01.2012
Сообщений: 7,436
10.01.2013, 15:17     Наследование в C++, или болезненный переход с Java #11
Цитата Сообщение от ForEveR Посмотреть сообщение
ясен пень
просто ТС вопрошал можно ли обойтись без виртуальных методов одной перегрузкой и у него могло создасться впечатление, что показанный пример как раз содержит решение в интересующем его ключе, а на деле - это то же самое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2013, 18:06     Наследование в C++, или болезненный переход с Java
Еще ссылки по теме:

java или c++ лучше для написания простых 2d игр? - C++
для написания простых 2d игр лучше java или c++? и какие есть графические библиотеки для них?

Стоит ли вообще дальше изучать С++ или перейти на Java? - C++
привет. многие начали изучать программирование с языка С++. поэтому я пошёл по этому же пути. начинал читать учебник Либерти, но потом...

C++, Java или Python. Что лучше для кроссплатформенного десктопа? - C++
C++ vs Java vs Python ? P.S Для декстопа P.S.S Я новичок.

Наследование в C++ - C++
Прошу помощи, ибо С++ не моё, а лабораторные работы девушке сдавать надо: Создать 1 базовый класс и несколько производных. Все...

наследование - C++
#include &lt;iostream&gt; using namespace std; int SZ=10; class Base{ protected: char familia; char inichiali; char...


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

Или воспользуйтесь поиском по форуму:
Anion
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 16
10.01.2013, 18:06  [ТС]     Наследование в C++, или болезненный переход с Java #12
Почитал статью: Виртуальные функции в C++.

Добавлено через 28 минут
Не дописал месседж.
В общем вроде всё понял.
Yandex
Объявления
10.01.2013, 18:06     Наследование в C++, или болезненный переход с Java
Ответ Создать тему
Опции темы

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