如何创建矢量的getter和setter?

问题描述 投票:0回答:1

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个点组成的向量,如何创建它们的getter和setter?我想我创建了setter函数,但我不确定.注:GeoBox我的文件名是 "GeoBox"。

c++ getter-setter
1个回答
0
投票

要创建一个向量,你应该把它初始化为一个模板类型。

对于setter函数,你必须实现擦除()函数,该函数可以接收两个迭代器,一个迭代器指向你要删除的值,如果你要删除一个指向初始值和最后一个值的元素范围,则可以接收两个迭代器。 erase()函数已经是c ++ 11中实现的函数,但可以开发。


0
投票

其似乎这样做可能会成功。为了提高效率,我把你的类改成了存储指针而不是对象。当然,我不能测试这一点,因为我没有你其余的代码,不能保证你的设置。

#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

指针可以(也应该)在这种情况下使用,因为它们可以提高程序的整体速度。

© www.soinside.com 2019 - 2024. All rights reserved.