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

Как сделать хитрое наследование? Хранить в одном контейнере родителя и потомков - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нелинейное уравнение http://www.cyberforum.ru/cpp-beginners/thread1175005.html
Всем привет Мне попалась тема в курсач методы решения систем нелинейных алгебр ур. Нужно написать прогу по методу простых итераций,главное чтобы уравнение было нелинейное. Сколько не читал и не...
C++ Найти самое длинное слово в строке (исправить код) Задание: найти самое длинное слово в строке { int i=0,k,l=0; char r; cout<<"input str: "; cin.get(r,50); char slovo ; while(r!='\0') { http://www.cyberforum.ru/cpp-beginners/thread1175002.html
Выдает ошибку,тут что не так? Простейший класс C++
#include<conio.h> #include<io.h> #include<string.h> #include<iostream.h> #include<math.h> //--------------------------------------- class AREA{ long a; public: void action();
C++ Алгоритм составления расписания занятий ВУЗа
Дорогие друзья, сейчас у меня на руках задание по составлению расписания в ВУЗе. Пока определилась только со структурами и вводом, считываю введеные данные в файл, так же организовала графическое...
C++ Алгоритм Хорспула c++ http://www.cyberforum.ru/cpp-beginners/thread1174944.html
Доброго времени суток! Мне нужно реализовать алгоритм Бойера-Мура-Хорспула В самой сути разобрался, но программно не знаю как сделать. У кого то есть готовый исходник? можно на Шарпе или...
C++ Задача на логику, про путешественника и ограниченный бюджет Путешественник располагает суммой Р рублей. Он может двигаться со скоростью 5км/ч бесплатно, со скоростью 40 км/ч за 14руб или со скоростью 80 км/ч за 10р/км. Определить сможет ли он преодолеть... подробнее

Показать сообщение отдельно
don_voldemar
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 2

Как сделать хитрое наследование? Хранить в одном контейнере родителя и потомков - C++

13.05.2014, 21:43. Просмотров 536. Ответов 5
Метки (Все метки)

Доброго времени суток!

Интересует, можно ли при создании класса-потомка назначать его родительский класс (не копировать, а именно назначать)?
Поясню, зачем это хотелось бы сделать. Есть класс-контейнер, что-то типа:
C++ (Qt)
1
2
3
4
class Cont{
public:
    std::vector<A> as;
}
Экземпляры класса A конструируются с передачей им определенных параметров, и в зависимости от этого создают экземпляр класса B или C:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class B;
class C;
 
class A{
    A(<params>) { ... }
public:
    // out-interface functions
    virtual void sendMessage(std::string message);
protected:
    // in-interface functions
    void messageWasReceived(std::string message);
private:
    B * b;
    C * c;
    Cont * cont;
}
К примеру, B и C у меня клиент и сервер, что из них создается - зависит от параметров в конструкторе класса A, который является универсальным классом соединения.
Теперь для простоты (а точнее, для красоты кода) я хотел бы, чтобы клиенту и серверу не надо было хранить внутри себя указатель на экземпляр класса более высокого уровня, будь то A или Cont. Для этого я наследую B и C от A:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class B : public A
{
public:
    void sendMessage(std::string message);
private:
    void recvMes(std::string message) { ... messageWasReceived(message);}
}
 
class C : public A
{
public:
    void sendMessage(std::string message);
private:
    void recvMes(std::string message) { ... messageWasReceived(message);}
}
Однако, мои знания о наследовании позволяют мне максимум, что сделать - это скопировать экземпляр класса A, созданного в Cont, в экземпляр класса A, который является предком B или C. При этом, если я напишу в Cont:
C++ (Qt)
1
as[0].sendMessage("txt");
, то не произойдет вызова B::sendMessage или C::sendMessage, чего хотелось бы.

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