Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
General_TaO
3 / 3 / 0
Регистрация: 01.07.2017
Сообщений: 142
1

Передача конструктору одного класса объект другого класса

03.11.2017, 13:11. Просмотров 1473. Ответов 11
Метки нет (Все метки)

Здравствуйте, кодеры.

Столкнулся с проблемой. У меня есть 2 класса Camera и Game и соответствующие конструкторы.


main.ccp
C++ (Qt)
1
2
3
4
5
6
#include "camera.h"
#include "game.h"
//#include ...
Camera camera(glm::vec3(0.0f, 0.0f, 3.0f));
 
Game game(camera); //????
camera.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#ifndef CAMERA_H
#define CAMERA_H
//#include ...
class Camera
{
public:
Camera(glm::vec3 position){...}
glm::mat4 func(){}
float Zoom;
};
#endif
game.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef GAME_H
#define GAME_H
#include "camera.h"
//#include ...
class Game
{
public:
Game(Camera camera(glm::vec3 position)){...} //????? //error
 
void init){
flaot a = camera.Zoom //!!!!!
}
};
#endif
Хочу использовать функции и переменные созданного объекта camera в классе Game.

Как это все сделать? Буду очень благодарен за любую помощь!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2017, 13:11
Ответы с готовыми решениями:

Передача указателя в класс на объект другого класса
Не могу передать ссылку на объект класса в другой класс main.cpp #include <iostream>...

Как заменить объект List одного класса объектом другого?
к примеру дано нам 1 объект класса Book , я хочу его вставить в класс Table вместо удаленного...

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

Передача данных объекта одного класса , объекту другого
Доброго времени суток. В общем, столкнулся с проблемой передачи данных от одного класса другому....

Использование в качестве поля класса указатель на объект другого класса
Ошибка в названии - "указателЯ" Вот, пытаюсь освоить ООП (пока только учусь): создаю класс...

11
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
03.11.2017, 13:12 2
Зачем вам в Game передавать объект типа Camera?
Он хранит объект класса Camera или тут подразумевалось наследование?
Или надо поля из Game инициализировать с помощью свойств переданного аргумента?
0
Kuzia domovenok
2548 / 2228 / 557
Регистрация: 25.03.2012
Сообщений: 8,068
Записей в блоге: 1
Завершенные тесты: 1
03.11.2017, 13:14 3
Game(Camera camera){...}
или даже лучше
Game(const Camera& camera){...}
1
General_TaO
3 / 3 / 0
Регистрация: 01.07.2017
Сообщений: 142
03.11.2017, 13:29  [ТС] 4
MrGluck, Хочу использовать функции и переменные созданного объекта camera в классе Game.

Добавлено через 6 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
или даже лучше
Game(const Camera& camera){...}
В таком случае у меня выдаёт ошибку в 4 строке main.cpp (фрагмент кода в шапке темы):
ошибка: no match for call to '(Camera) (glm::vec3)'
Game Breakout( camera(glm::vec3(0.0f, 0.0f, 3.0f)));
****************^


Добавлено через 9 минут
* не Breakout, а game.

Все было бы круто, но я не знаю что делать с (glm::vec3(0.0f, 0.0f, 3.0f))
0
03.11.2017, 13:29
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
03.11.2017, 13:39 5
Как-то так
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
27
28
29
30
31
32
#include <array>
#include <iostream>
 
namespace glm
{
    using vec3 = std::array<float, 3>;
}
 
class Camera
{
public:
    Camera(const glm::vec3 &position) : m_zoom(position[0]) {}
    float GetZoom() const { return m_zoom; }
private:
    float m_zoom;
};
 
class Game
{
public:
    Game(const Camera &cum) : m_a(cum.GetZoom()) {}
    int GetA() const { return m_a; }
private:
    int m_a;
};
 
int main()
{
    const Camera c({1.1, 2.2, 3.3});
    const Game g(c);
    std::cout << g.GetA();
}
1
Kuzia domovenok
2548 / 2228 / 557
Регистрация: 25.03.2012
Сообщений: 8,068
Записей в блоге: 1
Завершенные тесты: 1
03.11.2017, 13:41 6
Цитата Сообщение от MrGluck Посмотреть сообщение
Game(const Camera &cum)
Ой, малафья! Малафья в коде! Я прям засмущался такое читать!
0
General_TaO
3 / 3 / 0
Регистрация: 01.07.2017
Сообщений: 142
03.11.2017, 14:04  [ТС] 7
Цитата Сообщение от MrGluck Посмотреть сообщение
: m_a(cum.GetZoom())
Можете объяснить, пожалуйста, какую роль играть этот фрагмент в коде? (строка 21)
0
532235
12 / 14 / 6
Регистрация: 24.10.2017
Сообщений: 44
03.11.2017, 14:09 8
C++
1
Game(Camera camera(glm::vec3 position)){...} //????? //error
ошибка в том что после camera идут её аргументы(glm::vec3 position)

нужно так
C++
1
2
3
4
5
Game(Camera camera){...}
 
либо
 
Game(Camera& camera){...}
1
General_TaO
3 / 3 / 0
Регистрация: 01.07.2017
Сообщений: 142
03.11.2017, 14:18  [ТС] 9
Спасибо, MrGluck, ваша интерпретация помогла мне.
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
03.11.2017, 14:21 10
Цитата Сообщение от General_TaO Посмотреть сообщение
Можете объяснить, пожалуйста, какую роль играть этот фрагмент в коде? (строка 21)
инициализация поля m_a с помощью списка инициализации конструктора. В качестве аргумента передаётся результат работы метода GetZoom() переданного объекта cum.

Добавлено через 52 секунды
То есть просто пример инициализации полей класса Game с помощью полей класса Camera. Просто я дополнительно сделал поля приватными и написал get метод.
1
General_TaO
3 / 3 / 0
Регистрация: 01.07.2017
Сообщений: 142
03.11.2017, 15:00  [ТС] 11
Ещё один вопрос... А что, если я хочу в одном из методов класса game передать объект "сum" объекту какого-то другого класса т. е.:

C++ (Qt)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <array>
#include <iostream>
 
namespace glm
{
    using vec3 = std::array<float, 3>;
}
 
class Camera
{
public:
    Camera(const glm::vec3 &position) : m_zoom(position[0]) {}
    float GetZoom() const { return m_zoom; }
private:
    float m_zoom;
};
 
class Game
{
public:
    Game(const Camera &cum) : m_a(cum.GetZoom()) {}
     int GetA() const { 
     OmgClass omg(cum); //<-------
     return m_a; 
      }
private:
    int m_a;
};
 
int main()
{
    const Camera c({1.1, 2.2, 3.3});
    const Game g(c);
    std::cout << g.GetA();
}
 
class OmgClass
{
public:
     OmgClass(const Camera &kum) : k_a(cum.GetZoom()) {}
     int GetK() const { return k_a; }
private:
    int k_a;
};
0
MrGluck
Форумчанин
Эксперт CЭксперт С++
8121 / 4973 / 1436
Регистрация: 29.11.2010
Сообщений: 13,456
03.11.2017, 15:14 12
Цитата Сообщение от General_TaO Посмотреть сообщение
А что, если я хочу в одном из методов класса game передать объект "сum" объекту какого-то другого класса т. е.:
Тогда 2 варианта:
1. сохранить объект Camera как поле класса Game и работать с этим полем при вызове метода
2. получить Camera как параметр в метод

Если поступаемые данные будут отличаться, то лучше 2 способ. Если они не меняются после создания объекта Game, то лучше 1 способ.

Не по теме:

Лучше замените cum на cam

0
03.11.2017, 15:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2017, 15:14

Ошибка компиляции (преобразование объекта класса в объект другого класса)
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует...

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив...

Как переместить из стека одного класса в массив другого класса?
// HW_on.24.11_classStack_SantaClaus.cpp: определяет точку входа для консольного приложения. //...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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