Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
KokosSPb
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
1

Объект общего вида (Object) в консольном приложении

28.11.2013, 11:46. Просмотров 583. Ответов 19
Метки нет (Все метки)

Всем привет.
Не смог понять одной вещи: есть ли возможность создать функцию с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось), как в VB, C#, Java или Obcect Pascal?
Я нашел, что такое существует при использовании пространства имен System, но такое пространство имен в консоли не подключить (или не получается именно у меня).
Как быть?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 11:46
Ответы с готовыми решениями:

Timer в консольном приложении
Доброе время суток! Подскажите пожалуйста, как в консольном приложении создать таймер, который...

Ошибка в консольном приложении
{ class Program { public struct Point { public int X; ...

Таймер в консольном приложении
Всем доброго времени суток, у меня вопрос, как сделать так, чтобы программа записывала текст в...

Графика в консольном приложении
Помогите создать приблизительно такую штуку, которая будет высвечиваться при запуске консольной...

Графика в консольном приложении VS
подскажите как построить систему координат X,Y. в консольном приложении.Какие модули следует...

19
gray_fox
What a waste!
1557 / 1262 / 166
Регистрация: 21.04.2012
Сообщений: 2,641
Завершенные тесты: 3
28.11.2013, 11:55 2
Цитата Сообщение от KokosSPb Посмотреть сообщение
есть ли возможность создать функцию с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось), как в VB, C#, Java или Obcect Pascal?
В С++ нет такого общего для всех классов предка. Можно использовать шаблоны, но это по другому работает.
Цитата Сообщение от KokosSPb Посмотреть сообщение
Я нашел, что такое существует при использовании пространства имен System, но такое пространство имен в консоли не подключить (или не получается именно у меня).
System - это из С++/CLI, а не С++.
1
MrCold
862 / 760 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
28.11.2013, 11:56 3
KokosSPb, в С++ Template-Ы или void* .
0
Raali
647 / 350 / 75
Регистрация: 06.07.2013
Сообщений: 1,123
Завершенные тесты: 1
28.11.2013, 12:45 4
Цитата Сообщение от KokosSPb Посмотреть сообщение
с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось)
хочется спросить, зачем?
0
SatanaXIII
Почетный модератор
Эксперт С++
5795 / 2790 / 385
Регистрация: 01.11.2011
Сообщений: 6,792
Завершенные тесты: 1
28.11.2013, 14:14 5
Цитата Сообщение от KokosSPb Посмотреть сообщение
Не смог понять одной вещи: есть ли возможность создать функцию с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось), как в VB, C#, Java или Obcect Pascal?
Как мне подсказывает священная борланда имеется в виду создание функции-метода класса, которая получает аргумент - указатель на экземпляр такого же класса.
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.11.2013, 14:15 6
Цитата Сообщение от Raali Посмотреть сообщение
хочется спросить, зачем?
Вероятно хочется полиморфного поведения внутри функции. Но для этого должна быть иерархия.
А единого коренного типа в C++ нет.
0
gray_fox
What a waste!
1557 / 1262 / 166
Регистрация: 21.04.2012
Сообщений: 2,641
Завершенные тесты: 3
28.11.2013, 14:19 7
Цитата Сообщение от Raali Посмотреть сообщение
хочется спросить, зачем?
Как вариант если параметризации нет, а обобщённый код нужен (коллекция какая-нибудь, как в старой Яве).
0
KokosSPb
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
28.11.2013, 16:43  [ТС] 8
Цитата Сообщение от gray_fox Посмотреть сообщение
Как вариант если параметризации нет, а обобщённый код нужен
почти, использую класс на подобии списка или стека, он вообще содержит только указатели, и я хочу иметь возможность передавать на него указатели любого типа :-)
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.11.2013, 16:49 9
Цитата Сообщение от KokosSPb Посмотреть сообщение
передавать на него указатели
на него или "в него"?
Либо надо иерархию строить с базовым типом, либо использовать void*.
0
gray_fox
What a waste!
1557 / 1262 / 166
Регистрация: 21.04.2012
Сообщений: 2,641
Завершенные тесты: 3
28.11.2013, 17:00 10
Цитата Сообщение от KokosSPb Посмотреть сообщение
я хочу иметь возможность передавать на него указатели любого типа :-)
Всмысле в один и тот же контейнер указатели с разными, не связанными между собой типами? Тогда void *, только придётся при извлечении приводить к нужному типу, что вообще черевато ошибками.
0
KokosSPb
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
28.11.2013, 19:43  [ТС] 11
Цитата Сообщение от gray_fox Посмотреть сообщение
Всмысле в один и тот же контейнер указатели с разными, не связанными между собой типами?
ну, по сути, указатели будут одного типа (просто еще не решил какого), но хотелось бы написать так, чтобы было универсально, а не так как я сейчас (сейчас для проверки тип объекта int):-)
C++
1
2
#define Object int
void Add(int x);
я могу, конечно потом заменить свой int на любой другой тип, но просто хотел выяснить, можно ли без этой фигни?:-)
0
gray_fox
What a waste!
1557 / 1262 / 166
Регистрация: 21.04.2012
Сообщений: 2,641
Завершенные тесты: 3
28.11.2013, 19:46 12
Цитата Сообщение от KokosSPb Посмотреть сообщение
можно ли без этой фигни?:-)
Шаблон класса.
1
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.11.2013, 20:21 13
Цитата Сообщение от gray_fox Посмотреть сообщение
Шаблон класса.
Шаблонный класс, если проводить аналогии на std::vector<T> не позволяет хранить полиморфные типы. Если конечно T - это не указатель на базовый класс некоторой иерархии.
1
KokosSPb
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
28.11.2013, 20:31  [ТС] 14
Понял, нельзя :-)
0
KokosSPb
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.12.2013, 08:00  [ТС] 15
А может всё-же есть идеи? :-) Хотелось бы иметь возможность использовать свой класс для двух типов аргументов и при этом не дублировать класс с новым названием и другим типом аргумента, но в остальном - идентичным
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.12.2013, 10:18 16
Цитата Сообщение от KokosSPb Посмотреть сообщение
не дублировать класс с новым названием и другим типом аргумента, но в остальном - идентичным
Ну это почти и есть определение шаблона. Что Вас не устроило-то в предыдущих сообщениях?
1
MrCold
862 / 760 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
02.12.2013, 11:35 17
Цитата Сообщение от KokosSPb Посмотреть сообщение
иметь возможность использовать свой класс для двух типов аргументов и при этом не дублировать класс с новым названием и другим типом аргумента, но в остальном - идентичным
Операторы преобразования типов ?

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
#include <iostream>
#include <sstream>
#include <string>
 
class  Number
{
 public:
 
     Number() :intData(0) {}
 
      Number(int inIntData) : intData(inIntData)
     {
         std::ostringstream oss;
          oss << inIntData;
          strData = oss.str();
     }
 
     Number(const std::string & str) : strData(str)
     {
        intData = atoi(str.c_str());
 
     }
 
    operator std::string() const
    {
        return strData;
    }
 
    operator int () const
    {
        return intData;
    }
 
private:
    int  intData;
    std::string  strData;
};
 
void PrintString ( const std::string & s )
{
    std::cout << s << std::endl;
}
 
void PrintInt ( int value )
{
    std::cout << value << std::endl;
}
 
 
int main()
{
    Number tNumber("1239777");
 
        PrintString (tNumber);
        PrintInt    (tNumber);
 
    system("pause");
}
1
KokosSPb
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.12.2013, 21:38  [ТС] 18
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну это почти и есть определение шаблона. Что Вас не устроило-то в предыдущих сообщениях?
простенький пример бы :-) я просто не знаю как шаблоны создавать

Добавлено через 2 минуты
Цитата Сообщение от MrCold Посмотреть сообщение
Операторы преобразования типов ?
Это не совсем понял, типы то могу быть (и будут) далеко не стандартные, это вообще будут собственные классы
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.12.2013, 22:08 19
Цитата Сообщение от KokosSPb Посмотреть сообщение
простенький пример бы :-) я просто не знаю как шаблоны создавать
шаблон класса:
C++
1
2
3
4
5
6
template <class T>
class C
{
public:
  T value;
};
Использование:

C++
1
2
3
C<int> c1; // экземпляр класса с полем value типа int
C<double> c2; // экземпляр класса с полем value типа double
C<MyClass> c3; // экземпляр класса с полем value типа MyClass
и т.д.
1
Байт
Эксперт C
20327 / 12882 / 2698
Регистрация: 24.12.2010
Сообщений: 26,921
02.12.2013, 22:32 20
KokosSPb, Кажется, я понимаю, что вы хотите. Акцент на слове кажется. Вам нужен класс типа вектора, в котором хранятся всякие разные штуки. Это очень близко к понятию свойств, используемому в Qt, там можно к любому объекту (не классу) добавлять эти свойства. Единственное, что от них нужно - имена и типы.
У меня стояла подобная задача на чистом Си лет 20 назад. И была благополучно решена. Сначала надо было всего-то, чтоб незнамо сколько строк незнамо какой длины помещались в одну внятную структуру. Сейчас это называется класс, но я особой разницы не вижу. Если есть набор функций, эту структуру обслуживающий, и не от кого приватизировать, разница только в том, что вместо s.metod() писать func(&s). (Упрощаю, конечно)
Потом выяснилось, что вместо строк можно помещать в этот "вектор" другие, сколь угодно сложные структуры (ихние экземпляры). Пару простых макросов - все дела.
Хочется разные в одном "векторе" - добавьте пару полей.
Все было решено без всяких new-delete (их тогда еще не было!), простыми, посконными malloc-free
Так что ваша задача - решаема. И не так чтоб очень сложна. Просто плюньте на встроенные возможности, и сделайте все своими ручками. Потом приятно будет трудовые мозоли трогать

Добавлено через 6 минут
Или посмотрите в сторону Qt, где все эти штуки весьма грамотно реализованы.
В моем случае, я понимаю - как, может быть в самом деле и не так, но один из способов я вижу. И значит. могу догадаться, как это работает.
2
02.12.2013, 22:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 22:32

MessageBox в консольном приложении
сделал так чтоб выводило текст из файла в консоль #include &quot;stdafx.h&quot; #include &lt;fstream&gt;...

Тетрис в консольном приложении
Помогите с написанием тетриса в консоли, пожалуйста. Как сделать поле, и чтобы по нему...

Таймер в консольном приложении
Подскажите, как сделать чтобы консольное приложение было постоянно запущено и раз в 1 минуту...


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

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

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