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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
#1

Класс как аргумент функции - C++

26.04.2012, 18:34. Просмотров 2301. Ответов 6
Метки нет (Все метки)

Доброго времени суток

Набрёл на такой пример в openGL и не могу понять как он робит, подскажите.

Вот описание ф-ции:
C++
1
2
3
4
void hardWirededHouse(GLintPoint peak,GLint width, GLint height)
{
  .......
}
Как при вызове ф-ции передать правильно параметры?
GLintPoint peak создаётся объект peak ,а вот как передать в него параметр я так и не понял.(До этого читал Дейтелов но там такого примера не было,как передавать в ф-цию ссылку на объект я знаю,а вот это чудо я впервые вижу)
Если нужно вот например описание класса:
C++
1
2
3
4
5
6
7
8
9
#ifndef POINT_H
#define POINT_H
 
class GLintPoint{
public:
    GLint x,y;
};
 
#endif
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2012, 18:34     Класс как аргумент функции
Посмотрите здесь:

Абстрактный класс, как аргумент функции - C++
добрый день. есть базовый класс Tag внем строковое поле Name есть производные от него класы SmplTag со строковым полем Value и класс...

Класс как аргумент своего же метода - C++
В примере ниже происходит лишний (по замыслу не нужный) вызов деструктора. Вопрос в следующем: как в методе класса в качестве аргумента...

Auto как аргумент функции - C++
Возможно ли объявить параметр функции как auto? void func(auto pt); //...

Указатель массива как аргумент функции - C++
Я прочитал несколько алгоритмов сортировки массивов, но не совсем понял, если массив чисел будет передан в аргумент функции через...

Функция как аргумент другой функции - C++
Добрый вечер, уважаемые. Собственно, пытаюсь функцию запихнуть в аргументы другой функции. На подобии маткадовского root(f(x),x,a,b)....

Произвольный объект как аргумент функции - C++
Здравствуйте! Подскажите, пожалуйста, можно ли функции передавать произвольный объект? В Java есть такая конструкция: public...

Как сделать ввод в аргумент(ы) функции? - C++
Не понятно посмотрите код)#include<iostream> #include<time.h> using namespace std; template <typename T> T midle (T max){ //KOD ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
7178 / 4344 / 634
Регистрация: 29.11.2010
Сообщений: 11,822
26.04.2012, 18:54     Класс как аргумент функции #2
GLintPoint здесь выступает как "тип переменной". При этом, передавая объект, ты уже передаешь ему его поля (x и y), т.е. 2 и 3 аргумент не нужны, если я правильно понимаю что ты хочешь с ними делать.
И да, передавать класс лучше константными ссылками, т.к. фактически, при передаче объекта программа копирует его, что требует больших затрат памяти, а это не есть гуд.

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
class GLintPoint{
public:
    GLintPoint(int a, int b): x(a), y(b){}
    int x,y;
};
 
void hardWirededHouse(const GLintPoint &peak)
{
     std::cout<< "x = "<< peak.x<< " y = "<< peak.y;
}
 
int main()
{
    GLintPoint g(10, 20);
    hardWirededHouse(g);
    return 0;
}
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
26.04.2012, 18:59  [ТС]     Класс как аргумент функции #3
В объект я хочу передать координаты вершины,а остальные 2 переменные это толщина объекта и его высота.
Т.е. мне надо создать объект в мейне а потом его передать ф-ции и остальные 2 параметра,что то я запутался(
hardWirededHouse(?,?,?);


Угу вот такой как ты описал подход я и изучал в книги Дейтелов,а тут в книги по openGL какието мрачные примеры представлены
MrGluck
Модератор
Эксперт CЭксперт С++
7178 / 4344 / 634
Регистрация: 29.11.2010
Сообщений: 11,822
26.04.2012, 19:20     Класс как аргумент функции #4
Цитата Сообщение от Rusl_v Посмотреть сообщение
Т.е. мне надо создать объект в мейне а потом его передать ф-ции и остальные 2 параметра
hardWirededHouse(?,?,?);
Да, можно делать так:
C++
1
2
3
4
5
void hardWirededHouse(const GLintPoint &peak, GLint a, GLint b)
{
if (peak.x == a && peak.y == b) // например
...
}
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
26.04.2012, 20:57  [ТС]     Класс как аргумент функции #5
Сформулирую заново вопрос свой.
Например:
C++
1
2
3
4
5
6
7
8
9
10
void hardWirededHouse(GLintPoint peak,GLint width, GLint height)
{
glBegin(GL_LINE_LOOP);
    glVertex2i(peak.x,peak.y);
    glVertex2i(peak.x + width / 2, peak.y - 3*height/8);
    glVertex2i(peak.x + width / 2, peak.y - height);
    glVertex2i(peak.x - width / 2, peak.y - height);
    glVertex2i(peak.x - width / 2, peak.y - 3*height/8);
    glEnd();    
}
Передаю я в эту ф-цию параметры и рисую разной ширины и длины домики(код упростил).
С 2 и 3 аргументом понятно как передавать, а вот как 1 передать(это вершина крыши) циферки чтобы не создавать каждый раз объект и не передавать его ссылками,т.е. чтобы объект создавался при входе в ф-цию,потом нарисовался и разрушался после выхода из ф-ции, или так нельзя????

Допустим чтобы нарисовать 3 домика нужно 3 раза вставить эту ф-цию с нужными параметрами,ну как бы так.
Например:
hardWirededHouse(?????,80,120);
hardWirededHouse(?????,120,210);
.............
MrGluck
Модератор
Эксперт CЭксперт С++
7178 / 4344 / 634
Регистрация: 29.11.2010
Сообщений: 11,822
27.04.2012, 00:55     Класс как аргумент функции #6
Цитата Сообщение от Rusl_v Посмотреть сообщение
Сформулирую заново вопрос свой.
Например:
C++
1
2
3
4
5
6
7
8
9
10
void hardWirededHouse(GLintPoint peak,GLint width, GLint height)
{
glBegin(GL_LINE_LOOP);
    glVertex2i(peak.x,peak.y);
    glVertex2i(peak.x + width / 2, peak.y - 3*height/8);
    glVertex2i(peak.x + width / 2, peak.y - height);
    glVertex2i(peak.x - width / 2, peak.y - height);
    glVertex2i(peak.x - width / 2, peak.y - 3*height/8);
    glEnd();    
}
Передаю я в эту ф-цию параметры и рисую разной ширины и длины домики(код упростил).
С 2 и 3 аргументом понятно как передавать, а вот как 1 передать(это вершина крыши) циферки чтобы не создавать каждый раз объект и не передавать его ссылками,т.е. чтобы объект создавался при входе в ф-цию,потом нарисовался и разрушался после выхода из ф-ции, или так нельзя????

Допустим чтобы нарисовать 3 домика нужно 3 раза вставить эту ф-цию с нужными параметрами,ну как бы так.
Например:
hardWirededHouse(?????,80,120);
hardWirededHouse(?????,120,210);
.............
Что-то я не совсем понял, зачем вам тогда объект нужен? Передавайте в функцию координаты по х и у и рисуйте домик без всяких объектов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 02:09     Класс как аргумент функции
Еще ссылки по теме:

std::setw() как аргумент функции - C++
void print(const int format = 0) const { for (size_t i = 0; i&lt;m_rows; ++i) { for (size_t j = 0;...

Указатель на функцию с аргументами, как аргумент другой функции - C++
У меня есть некая функция, которая принимает как аргумент другую функцию typedef void(*func_type)(); start(func_type...

Передача потока (текущ.позиции курсора в файле) как аргумент функции - C++
Всем привет! Столкнулся с такой проблемой, Конструкция довольно тяжелая для меня. Мне нужно чтобы я открывал файл для чтения, затем...

Путь к файлу вводится в командной строке как аргумент функции main() - C++
. Путь к файлу вводится в командной строке как аргумент функции main(). Как это написать?

Не получается адрес динамического двумерного массива передать, как аргумент функции - C++
/* Лабораторная работа №3 Во всех вариантах необходимо написать три функции, которые будут вызываться из функции main(). Первая...


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

Или воспользуйтесь поиском по форуму:
Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
27.04.2012, 02:09  [ТС]     Класс как аргумент функции #7
Цитата Сообщение от MrGluck Посмотреть сообщение
Что-то я не совсем понял, зачем вам тогда объект нужен? Передавайте в функцию координаты по х и у и рисуйте домик без всяких объектов.
Точно
Да я просто зациклился на примере в книги и пытался его разобрать, в итоги запутал всех вас и сам себя.Если интересно я прикрепил полное описание задания и часть кода.
Вложения
Тип файла: doc Doc1.doc (60.5 Кб, 20 просмотров)
Yandex
Объявления
27.04.2012, 02:09     Класс как аргумент функции
Ответ Создать тему
Опции темы

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