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

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

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

Набрёл на такой пример в 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
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
 Аватар для Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
26.04.2012, 18:59  [ТС]     Класс как аргумент функции #3
В объект я хочу передать координаты вершины,а остальные 2 переменные это толщина объекта и его высота.
Т.е. мне надо создать объект в мейне а потом его передать ф-ции и остальные 2 параметра,что то я запутался(
hardWirededHouse(?,?,?);


Угу вот такой как ты описал подход я и изучал в книги Дейтелов,а тут в книги по openGL какието мрачные примеры представлены
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
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
 Аватар для 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
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
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     Класс как аргумент функции
Еще ссылки по теме:

C++ Не получается адрес динамического двумерного массива передать, как аргумент функции
C++ Путь к файлу вводится в командной строке как аргумент функции main()
C++ Auto как аргумент функции

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

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

Текущее время: 08:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru