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

подставить неизвестный класс в функцию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нужно исправить ошибку http://www.cyberforum.ru/cpp-beginners/thread133195.html
Здравствуйте уважаемые форумчане. Не молчите пожалуйста, ответьте хоть кто-нибудь. Сколько писал никто не отвечает. Может потому что вопросы слишком простые, но все же хоть что-то ответьте. Нужно подправить следующий код: #include "stdafx.h" #include "iostream" #include "math.h" #include "conio.h" using namespace std;
C++ Указатели Написать функцию, в которой в качестве параметра принимается указатель массив. Отсортировать элементы массива по возрастанию и вывести на экран. http://www.cyberforum.ru/cpp-beginners/thread133186.html
работа с файлами C++
Написать программу, которая выводит на экран содержимое текстового файла
C++ Печать матрицы
Есть разреженная матрица, которая считывается из файла в цепочку ненулевых элементов и вектор указывающий на индекс начало новой строки в цепочке. Считать я считал без проблем, а с печатью проблемы. Помогите пожалуйста, вот код #include <stdio.h> #include <stdlib.h> char data; int input_matrix; int A_matrix;
C++ C or C++ http://www.cyberforum.ru/cpp-beginners/thread133173.html
На плоскости даны 20 точек (x1,y1),(x2,y2)....(x20,y20). Рассмотрим прямоугольники, содержащие эти точки, причем стороны прямоугольников параллельны или перпендикулярны координаты противоположных углов такого прямоугольника левого нижнего и правого верхнего.
C++ поиск в ширину Помогите объяснить это по русски каждую строчку что тут написнао . #include <cstdio> #include <vector> #include <stack.h> #include <queue> #include <list> using namespace std; struct Ver { int v, w; подробнее

Показать сообщение отдельно
Skoi
16 / 16 / 1
Регистрация: 31.07.2009
Сообщений: 54
21.05.2010, 14:44     подставить неизвестный класс в функцию
имхо, Тут разница видать в том, что в ПХП среда исполнения помнит чем был объект
до того как прошел в функцию через аргумент типа Object. В С++ этого нет,
если привел одно к другому, то чем это было раньше вспоминай сам и приводи
к чему нужно. Т.е. по идее вам надо в Human добавить какой-то опознавательный знак.
Например, что-то типа такого(Если я правильно понял Вашу задумку) -

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "stdafx.h"
 
class IMage
{
public:
    virtual void SomeMageActions() = 0;
};
 
class IPaladin
{
public:
    virtual void SomePaladinActions() = 0;
};
 
class Human 
{
public:
    enum TType
        {
            EMage, EPaladin
        };
TType Who;
IMage* GetMageInterface() { return (IMage*)this; } 
IPaladin* GetPaladinInterface() { return (IPaladin*)this; }
};
 
class Mage : Human, IMage
{
public:
    void SomeMageActions() {}
};
 
class Paladin : Human, IPaladin
{
public:
    void SomePaladinActions() {}
};
 
void Battle(Human* Player, Human* Enemy)
{
    switch(Player->Who)
    {
    case Human::EMage:
        Player->GetMageInterface()->SomeMageActions();
        break;
    case Human::EPaladin:
        Player->GetPaladinInterface()->SomePaladinActions();
        break;
    }
    ///И тоже самое для Enemy
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    Mage M;
    Paladin P;
    Battle((Human*)&M, (Human*)&P);
    return 0;
}
Хотя мож это и не самый лучший вариант, но больше ничего в голову не приходит.

А передавать неизвестно что можно ещё и так -

void DoSomething(void* aUnknown);

Но это, и то что будет дальше в такой функции, конечно злое колдунство.

Добавлено через 36 минут
А хотя и это всё не верно, потом исправлю.
 
Текущее время: 21:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru