Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Классы и указатели как параметры функции


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

Код

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



Чтобы функция создала объект типа class с указателем на неё point.
Как мне объявлять парметры функции? Ну вместо int или String - какой тип мне писать?

Автор: Sartorius 15.9.2008, 14:59
Код

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


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

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

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

Код

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); 
}

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

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

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

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

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

Автор: mes 16.9.2008, 09:43
http://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

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

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

Код

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


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

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

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

Код

type_name *p;
Create(p);


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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)