128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
1

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

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

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

Как в консольном приложении объявить переменные и создать объект
Добрый день,есть программа.Хочу её переделать в консольное приложение,чтобы не кнопки нажимать,а...

Как сделать так что бы пользователь (в консольном приложении) мог задавать значение через object?
Я знаю как через int или double (int a=int.Parse(Console.ReadLine())), а вот как с object такое...

Код который работает в консольном приложении в приложении Windows Forms выдает ошибку
Есть код для записи видео с экрана. В консольном приложении он работает, записывает все как нужно....

Есть объект такого типа object{object[]}
Как получить доступ к внутреннему объекту? Среда - Visual Studio 2010 Обрабатываю событие из...

19
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
28.11.2013, 11:55 2
Цитата Сообщение от KokosSPb Посмотреть сообщение
есть ли возможность создать функцию с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось), как в VB, C#, Java или Obcect Pascal?
В С++ нет такого общего для всех классов предка. Можно использовать шаблоны, но это по другому работает.
Цитата Сообщение от KokosSPb Посмотреть сообщение
Я нашел, что такое существует при использовании пространства имен System, но такое пространство имен в консоли не подключить (или не получается именно у меня).
System - это из С++/CLI, а не С++.
1
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
28.11.2013, 11:56 3
KokosSPb, в С++ Template-Ы или void* .
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
28.11.2013, 12:45 4
Цитата Сообщение от KokosSPb Посмотреть сообщение
с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось)
хочется спросить, зачем?
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
28.11.2013, 14:14 5
Цитата Сообщение от KokosSPb Посмотреть сообщение
Не смог понять одной вещи: есть ли возможность создать функцию с аргументом типа Object(Любой объект, чтоб, что я туда не передам - всё бы съелось), как в VB, C#, Java или Obcect Pascal?
Как мне подсказывает священная борланда имеется в виду создание функции-метода класса, которая получает аргумент - указатель на экземпляр такого же класса.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.11.2013, 14:15 6
Цитата Сообщение от Raali Посмотреть сообщение
хочется спросить, зачем?
Вероятно хочется полиморфного поведения внутри функции. Но для этого должна быть иерархия.
А единого коренного типа в C++ нет.
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
28.11.2013, 14:19 7
Цитата Сообщение от Raali Посмотреть сообщение
хочется спросить, зачем?
Как вариант если параметризации нет, а обобщённый код нужен (коллекция какая-нибудь, как в старой Яве).
0
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
28.11.2013, 16:43  [ТС] 8
Цитата Сообщение от gray_fox Посмотреть сообщение
Как вариант если параметризации нет, а обобщённый код нужен
почти, использую класс на подобии списка или стека, он вообще содержит только указатели, и я хочу иметь возможность передавать на него указатели любого типа :-)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.11.2013, 16:49 9
Цитата Сообщение от KokosSPb Посмотреть сообщение
передавать на него указатели
на него или "в него"?
Либо надо иерархию строить с базовым типом, либо использовать void*.
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
28.11.2013, 17:00 10
Цитата Сообщение от KokosSPb Посмотреть сообщение
я хочу иметь возможность передавать на него указатели любого типа :-)
Всмысле в один и тот же контейнер указатели с разными, не связанными между собой типами? Тогда void *, только придётся при извлечении приводить к нужному типу, что вообще черевато ошибками.
0
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
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
28.11.2013, 19:46 12
Цитата Сообщение от KokosSPb Посмотреть сообщение
можно ли без этой фигни?:-)
Шаблон класса.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.11.2013, 20:21 13
Цитата Сообщение от gray_fox Посмотреть сообщение
Шаблон класса.
Шаблонный класс, если проводить аналогии на std::vector<T> не позволяет хранить полиморфные типы. Если конечно T - это не указатель на базовый класс некоторой иерархии.
1
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
28.11.2013, 20:31  [ТС] 14
Понял, нельзя :-)
0
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.12.2013, 08:00  [ТС] 15
А может всё-же есть идеи? :-) Хотелось бы иметь возможность использовать свой класс для двух типов аргументов и при этом не дублировать класс с новым названием и другим типом аргумента, но в остальном - идентичным
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.12.2013, 10:18 16
Цитата Сообщение от KokosSPb Посмотреть сообщение
не дублировать класс с новым названием и другим типом аргумента, но в остальном - идентичным
Ну это почти и есть определение шаблона. Что Вас не устроило-то в предыдущих сообщениях?
1
873 / 771 / 173
Регистрация: 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
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
02.12.2013, 21:38  [ТС] 18
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну это почти и есть определение шаблона. Что Вас не устроило-то в предыдущих сообщениях?
простенький пример бы :-) я просто не знаю как шаблоны создавать

Добавлено через 2 минуты
Цитата Сообщение от MrCold Посмотреть сообщение
Операторы преобразования типов ?
Это не совсем понял, типы то могу быть (и будут) далеко не стандартные, это вообще будут собственные классы
0
:)
Эксперт С++
4773 / 3267 / 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
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2013, 22:32
Помогаю со студенческими работами здесь

Кириллица в консольном приложении C++
Приветствую вас, дорогие друзья. Подскажите пожалуйста, какой код нужно прописать в консольной...

Чат в консольном приложении
Помогите пожалуйста создать чат в консольном приложении. Вот хотела с подругой початиться. Очень...

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru