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

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

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

Таблица в консольном приложении C++
Таймер в консольном приложении C++
Timer в консольном приложении C++
C++ Изображение в консольном приложении.
C++ Вывод в консольном приложении
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.11.2013, 11:55     Объект общего вида (Object) в консольном приложении #2
Цитата Сообщение от KokosSPb Посмотреть сообщение
есть ли возможность создать функцию с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось), как в VB, C#, Java или Obcect Pascal?
В С++ нет такого общего для всех классов предка. Можно использовать шаблоны, но это по другому работает.
Цитата Сообщение от KokosSPb Посмотреть сообщение
Я нашел, что такое существует при использовании пространства имен System, но такое пространство имен в консоли не подключить (или не получается именно у меня).
System - это из С++/CLI, а не С++.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
28.11.2013, 11:56     Объект общего вида (Object) в консольном приложении #3
KokosSPb, в С++ Template-Ы или void* .
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
28.11.2013, 12:45     Объект общего вида (Object) в консольном приложении #4
Цитата Сообщение от KokosSPb Посмотреть сообщение
с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось)
хочется спросить, зачем?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
28.11.2013, 14:14     Объект общего вида (Object) в консольном приложении #5
Цитата Сообщение от KokosSPb Посмотреть сообщение
Не смог понять одной вещи: есть ли возможность создать функцию с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось), как в VB, C#, Java или Obcect Pascal?
Как мне подсказывает священная борланда имеется в виду создание функции-метода класса, которая получает аргумент - указатель на экземпляр такого же класса.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.11.2013, 14:15     Объект общего вида (Object) в консольном приложении #6
Цитата Сообщение от Raali Посмотреть сообщение
хочется спросить, зачем?
Вероятно хочется полиморфного поведения внутри функции. Но для этого должна быть иерархия.
А единого коренного типа в C++ нет.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.11.2013, 14:19     Объект общего вида (Object) в консольном приложении #7
Цитата Сообщение от Raali Посмотреть сообщение
хочется спросить, зачем?
Как вариант если параметризации нет, а обобщённый код нужен (коллекция какая-нибудь, как в старой Яве).
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
28.11.2013, 16:43  [ТС]     Объект общего вида (Object) в консольном приложении #8
Цитата Сообщение от gray_fox Посмотреть сообщение
Как вариант если параметризации нет, а обобщённый код нужен
почти, использую класс на подобии списка или стека, он вообще содержит только указатели, и я хочу иметь возможность передавать на него указатели любого типа :-)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.11.2013, 16:49     Объект общего вида (Object) в консольном приложении #9
Цитата Сообщение от KokosSPb Посмотреть сообщение
передавать на него указатели
на него или "в него"?
Либо надо иерархию строить с базовым типом, либо использовать void*.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.11.2013, 17:00     Объект общего вида (Object) в консольном приложении #10
Цитата Сообщение от KokosSPb Посмотреть сообщение
я хочу иметь возможность передавать на него указатели любого типа :-)
Всмысле в один и тот же контейнер указатели с разными, не связанными между собой типами? Тогда void *, только придётся при извлечении приводить к нужному типу, что вообще черевато ошибками.
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
28.11.2013, 19:43  [ТС]     Объект общего вида (Object) в консольном приложении #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Всмысле в один и тот же контейнер указатели с разными, не связанными между собой типами?
ну, по сути, указатели будут одного типа (просто еще не решил какого), но хотелось бы написать так, чтобы было универсально, а не так как я сейчас (сейчас для проверки тип объекта int):-)
C++
1
2
#define Object int
void Add(int x);
я могу, конечно потом заменить свой int на любой другой тип, но просто хотел выяснить, можно ли без этой фигни?:-)
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
28.11.2013, 19:46     Объект общего вида (Object) в консольном приложении #12
Цитата Сообщение от KokosSPb Посмотреть сообщение
можно ли без этой фигни?:-)
Шаблон класса.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.11.2013, 20:21     Объект общего вида (Object) в консольном приложении #13
Цитата Сообщение от gray_fox Посмотреть сообщение
Шаблон класса.
Шаблонный класс, если проводить аналогии на std::vector<T> не позволяет хранить полиморфные типы. Если конечно T - это не указатель на базовый класс некоторой иерархии.
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
28.11.2013, 20:31  [ТС]     Объект общего вида (Object) в консольном приложении #14
Понял, нельзя :-)
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
02.12.2013, 08:00  [ТС]     Объект общего вида (Object) в консольном приложении #15
А может всё-же есть идеи? :-) Хотелось бы иметь возможность использовать свой класс для двух типов аргументов и при этом не дублировать класс с новым названием и другим типом аргумента, но в остальном - идентичным
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.12.2013, 10:18     Объект общего вида (Object) в консольном приложении #16
Цитата Сообщение от KokosSPb Посмотреть сообщение
не дублировать класс с новым названием и другим типом аргумента, но в остальном - идентичным
Ну это почти и есть определение шаблона. Что Вас не устроило-то в предыдущих сообщениях?
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
02.12.2013, 11:35     Объект общего вида (Object) в консольном приложении #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");
}
KokosSPb
32 / 82 / 3
Регистрация: 03.02.2011
Сообщений: 463
02.12.2013, 21:38  [ТС]     Объект общего вида (Object) в консольном приложении #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну это почти и есть определение шаблона. Что Вас не устроило-то в предыдущих сообщениях?
простенький пример бы :-) я просто не знаю как шаблоны создавать

Добавлено через 2 минуты
Цитата Сообщение от MrCold Посмотреть сообщение
Операторы преобразования типов ?
Это не совсем понял, типы то могу быть (и будут) далеко не стандартные, это вообще будут собственные классы
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.12.2013, 22:08     Объект общего вида (Object) в консольном приложении #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
и т.д.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 22:32     Объект общего вида (Object) в консольном приложении
Еще ссылки по теме:

Графика в консольном приложении C++
Тетрис в консольном приложении C++
C++ Меню в консольном приложении

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

Или воспользуйтесь поиском по форуму:
Байт
 Аватар для Байт
13993 / 8824 / 1231
Регистрация: 24.12.2010
Сообщений: 15,990
02.12.2013, 22:32     Объект общего вида (Object) в консольном приложении #20
KokosSPb, Кажется, я понимаю, что вы хотите. Акцент на слове кажется. Вам нужен класс типа вектора, в котором хранятся всякие разные штуки. Это очень близко к понятию свойств, используемому в Qt, там можно к любому объекту (не классу) добавлять эти свойства. Единственное, что от них нужно - имена и типы.
У меня стояла подобная задача на чистом Си лет 20 назад. И была благополучно решена. Сначала надо было всего-то, чтоб незнамо сколько строк незнамо какой длины помещались в одну внятную структуру. Сейчас это называется класс, но я особой разницы не вижу. Если есть набор функций, эту структуру обслуживающий, и не от кого приватизировать, разница только в том, что вместо s.metod() писать func(&s). (Упрощаю, конечно)
Потом выяснилось, что вместо строк можно помещать в этот "вектор" другие, сколь угодно сложные структуры (ихние экземпляры). Пару простых макросов - все дела.
Хочется разные в одном "векторе" - добавьте пару полей.
Все было решено без всяких new-delete (их тогда еще не было!), простыми, посконными malloc-free
Так что ваша задача - решаема. И не так чтоб очень сложна. Просто плюньте на встроенные возможности, и сделайте все своими ручками. Потом приятно будет трудовые мозоли трогать

Добавлено через 6 минут
Или посмотрите в сторону Qt, где все эти штуки весьма грамотно реализованы.
В моем случае, я понимаю - как, может быть в самом деле и не так, но один из способов я вижу. И значит. могу догадаться, как это работает.
Yandex
Объявления
02.12.2013, 22:32     Объект общего вида (Object) в консольном приложении
Ответ Создать тему
Опции темы

Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru