Как я могу создать геттер и сеттер для вектора? - PullRequest
0 голосов
/ 03 мая 2020

Vector2D hpp файлы

#ifndef Vector2D_hpp
#define Vector2D_hpp

#include <iostream>
#include "Point2D.hpp"

namespace GeoBox{

class Vector2D{

      Point2D m_point1{};
      Point2D m_point2{};

public:
      Vector2D() = default;
      Vector2D(Point2D &point1, Point2D &point2)
{
    m_point1 = point1;
    m_point2 = point2;
}
void setVector(Point2D &point1, Point2D &point2);

};

Vector2D. cpp файлы

#include "Vector2D.hpp"
#include "Point2D.hpp"


void GeoBox::Vector2D::setVector(GeoBox::Point2D &point1, GeoBox::Point2D &point2) {
    Vector2D(point1, point2);

}

main. cpp

int main(int argc, const char * argv[]) {

GeoBox::Point2D point1{3.0, 1.0};
GeoBox::Point2D point2{2.0, 3.0};
GeoBox::Vector2D vect1{point1, point2};
}

Я пытаюсь создать вектор, состоящий из 2 точек. как я могу создать их добытчиков и поселенцев? Я думаю, что создал функцию сеттера, но я не уверен. примечание: GeoBox мое имя файла

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Кажется, это может сработать. Я изменил ваш класс для хранения указателей, а не объектов для эффективности. Конечно, я не могу это проверить, потому что у меня нет остальной части вашего кода и я не могу гарантировать вашу настройку.

#ifndef Vector2D_hpp
#define Vector2D_hpp

#include <iostream>
#include "Point2D.hpp"

namespace GeoBox {

    class Vector2D {
        Point2D* points[2];

    public:
        Vector2D() = default;
        Vector2D(Point2D* point1, Point2D* point2)
        {
            setVector(point1, point2);
        }
        void setVector(Point2D* point1, Point2D* point2) {
            points[0] = point1;
            points[1] = point2;
        }

        Point2D* getVector() {
            return points;
        }
    };
}
#endif

Чтобы сделать это со структурой (и без указателей в данном случае ) вы должны настроить его следующим образом:

#ifndef Vector2D_hpp
#define Vector2D_hpp

#include <iostream>
#include "Point2D.hpp"

namespace GeoBox {

    class Vector2D {
        struct Vector { //Define the struct
            Point2D point1;
            Point2D point2;
        } points;   //Create instance of struct

    public:
        Vector2D() = default;
        Vector2D(Point2D point1, Point2D point2)
        {
            setVector(point1, point2);
        }
        void setVector(Point2D i_point1, Point2D i_point2) {
            points.point1 = i_point1; //Access struct components
            points.point2 = i_point2;
        }

        Vector getVector() {
            return points;  //return struct
        }
    };
}
#endif

Указатели могут (и должны) использоваться в этом случае, однако, поскольку они позволяют увеличить общую скорость вашей программы.

0 голосов
/ 03 мая 2020

Чтобы создать вектор, вы должны инициализировать его как тип шаблона.

Для функции сеттера вы должны реализовать функцию erase (), которая может принимать два итератора, один из которых указывает на значение, которое вы хотите delete или два итератора, если вы хотите удалить диапазон элементов, указывающий на начальное и последнее значение. Функция erase () уже реализована в c ++ 11, но ее можно разработать.

...