Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы и указатели как параметры функции 
:(
    Опции темы
HyugaNeji
Дата 15.9.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.6.2008

Репутация: нет
Всего: нет



Привет. Возник вопрос:
Как передать классы или указатели как парметры функции?
Например

Код

void creF(clas, point){
 point = new clas(Application);
};



Чтобы функция создала объект типа class с указателем на неё point.
Как мне объявлять парметры функции? Ну вместо int или String - какой тип мне писать?
PM MAIL   Вверх
Sartorius
Дата 15.9.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 2
Всего: 37



Код

void creF(clas ** point){
 *point = new clas(Application);
};


Если возвращать указатель на класс планируешь. Ну или ссылкой 
Код

void creF(clas *&point){
 point = new clas(Application);
};

PM MAIL ICQ   Вверх
sprata
Дата 15.9.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 6.9.2008

Репутация: нет
Всего: нет



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

Код

class MyClass { };

void funct_1 (MyClass) { }; // ф-ия принимающая объект в качестве параметра
void funct_2 (MyClass &) { }; // ф-ия принимающая ссылку на объект в качестве параметра
void funct_3 (MyClass *) { }; // ф-ия принимающая указатель на объект в качестве параметра

void main()
{
    MyClass obj;

    funct_1(obj);
    
    funct_2(obj);    // это не опечатка, то что funct_2 приимает ссылку на объект в данном случае означает только то, что при передаче 
                     //параметра в ф- ию в памяти не будет создаваться временная копия объекта obj 
     
    funct_3(&obj); 
}


Это сообщение отредактировал(а) sprata - 15.9.2008, 15:36
PM MAIL   Вверх
mes
Дата 15.9.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(HyugaNeji @  15.9.2008,  14:52 Найти цитируемый пост)
Как передать классы ... как парметры функции?

Цитата(sprata @  15.9.2008,  15:21 Найти цитируемый пост)
Объекты классов так же как указатели или ссылки на объекты

чувствуются что ТС нужно передавать именно классы. 
Языковыми средствами С++ такое не позволено. 
Если действительно нужно нечто подобное , то смотрите паттерн фабрика.



--------------------
PM MAIL WWW   Вверх
HyugaNeji
Дата 16.9.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.6.2008

Репутация: нет
Всего: нет



Цитата(mes @ 15.9.2008,  15:06)
Языковыми средствами С++ такое не позволено. 
Если действительно нужно нечто подобное , то смотрите паттерн фабрика.

Эх очень жаль, придётся вручную делать, потому что я и понятия не имею что такое патэрн фабрика (
PM MAIL   Вверх
mes
Дата 16.9.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250





--------------------
PM MAIL WWW   Вверх
J0ker
Дата 17.9.2008, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(HyugaNeji @ 16.9.2008,  08:29)
Цитата(mes @ 15.9.2008,  15:06)
Языковыми средствами С++ такое не позволено. 
Если действительно нужно нечто подобное , то смотрите паттерн фабрика.

Эх очень жаль, придётся вручную делать, потому что я и понятия не имею что такое патэрн фабрика (

Код

template <class T>
void Create(T *&ptr)
{
   ptr = new T;
}


ну это вам просто для фану
только не показывайте это гуру - будут бить ногами, возможно по лицу (вобщем-то заслуженно smile


--------------------
user posted image
PM MAIL   Вверх
HyugaNeji
Дата 17.9.2008, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.6.2008

Репутация: нет
Всего: нет



Спасибо.
Но как потом её использовать, я неразобрался  smile  smile 
PM MAIL   Вверх
J0ker
Дата 18.9.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(HyugaNeji @ 17.9.2008,  07:53)
Спасибо.
Но как потом её использовать, я неразобрался  smile  smile

Код

type_name *p;
Create(p);


type_name - любой тип имеющий дефолтный конструктор


--------------------
user posted image
PM MAIL   Вверх
flagist0
Дата 19.9.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Если задача состоит именно в создании объекта по определенному адресу, то можно использовать placement new - new(addr) Class(params);

Это сообщение отредактировал(а) flagist0 - 19.9.2008, 11:27
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0885 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.