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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SVladimir
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5
#1

Произвольный объект как аргумент функции - C++

29.12.2013, 11:07. Просмотров 770. Ответов 6
Метки нет (Все метки)

Здравствуйте!

Подскажите, пожалуйста, можно ли функции передавать произвольный объект?
В Java есть такая конструкция:

Java
1
2
3
4
public void Foo(Object object)
{
MyClass class = (MyClass) object;
}
Существует ли подобная конструкция в C++?

P.S. Без использования наследования.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
29.12.2013, 11:17     Произвольный объект как аргумент функции #2
не перегрузка/шаблоны ...?
xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
29.12.2013, 11:34     Произвольный объект как аргумент функции #3
Шаблоны
C++
1
2
3
4
5
template<class T>
void Foo(T object)
{
    T MyClass = object;
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.12.2013, 11:46     Произвольный объект как аргумент функции #4
void* и передавай что хочешь. Но ничего хорошего в этом нет.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
29.12.2013, 12:00     Произвольный объект как аргумент функции #5
Цитата Сообщение от SVladimir Посмотреть сообщение
Без использования наследования.
Цитата Сообщение от SVladimir Посмотреть сообщение
В Java есть такая конструкция:
то есть она без наследования?
SVladimir
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5
30.12.2013, 11:15  [ТС]     Произвольный объект как аргумент функции #6
Цитата Сообщение от Tulosba Посмотреть сообщение
void* и передавай что хочешь. Но ничего хорошего в этом нет.
Но все равно это интересно.
Приведите, пожалуйста, пример кода.

Добавлено через 20 часов 23 минуты
Цитата Сообщение от xoror Посмотреть сообщение
Шаблоны
C++
1
2
3
4
5
template<class T>
void Foo(T object)
{
    T MyClass = object;
}
Если я не ошибаюсь, при передаче объекта в качестве аргумента такой функции создается его копия. А как передать объект по ссылке?

Спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2013, 11:30     Произвольный объект как аргумент функции
Еще ссылки по теме:
C++ Указатель на имя файла как аргумент функции. Как реализовать?
Указатель на функцию с аргументами, как аргумент другой функции C++
C++ Путь к файлу вводится в командной строке как аргумент функции main()
Передача потока (текущ.позиции курсора в файле) как аргумент функции C++
C++ Не получается адрес динамического двумерного массива передать, как аргумент функции

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.12.2013, 11:30     Произвольный объект как аргумент функции #7
Цитата Сообщение от SVladimir Посмотреть сообщение
Приведите, пожалуйста, пример кода.
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
#include <iostream>
 
void f( void* p, int type )
{
    switch( type )
    {
        case 0: std::cout << *reinterpret_cast<int*>(p); break; // int
        case 1: std::cout << *reinterpret_cast<double*>(p); break; // double
        //...
    }
    std::cout << std::endl;
}
 
int main() {
    
    int i = 42;
    double d = 3.1415;
    
    f( &i, 0 ); // ok
    f( &d, 1 ); // ok 
    
    f( &i, 1 ); // ошибка 
    f( &d, 0 ); // ошибка
    
    return 0;
}
http://ideone.com/MgRxhb

Добавлено через 1 минуту
Цитата Сообщение от SVladimir Посмотреть сообщение
А как передать объект по ссылке?
Передать по ссылке
C++
1
2
3
4
5
template<class T>
void Foo(T& object)
{
    T MyClass = object;
}
Yandex
Объявления
30.12.2013, 11:30     Произвольный объект как аргумент функции
Ответ Создать тему
Опции темы

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