2016/6/3 1003. Point & Vector

本文介绍了一个C++程序示例,展示了如何定义Point和Vector类,并实现运算符重载来支持向量加法及点与向量之间的操作。此外,还包含了友元函数的使用和类成员的正确声明与定义方式。

  这里我就要首先吐槽一下真是给例子能不能给文本直接copy啊给个图是几个意思...嗯这里麻烦的是前置声明。说实话在打项目的时候这种问题我是“见的多了”,不虚。但是在后面重载vector的+时直接就对*this +=了,弄得后面一直wa简直...前置声明的话就是可以先声明,然后再在实现里要用到的东西都声明之后再定义。当两个类彼此使用的时候就需要这种手段。可以先写一个类的声明(下一个类实现里需要的),然后将第二个类写完整,再在后面补充第一个类的内容。还有想吐槽的就是两个完全一样的友元函数分在两个类里也是没谁了...没错我说的就是friend Point operator+(const Point&,const Vector&);

#include <iostream>
using namespace std;
class Point
{
public:
	Point(int x , int y);
	Point(const Point &other);
	friend ostream& operator<<(ostream& out, const Point &point);
	int getX() const
	{
		return x_;
	}
	int getY() const
	{
		return y_;
	}
private:
	int x_;
	int y_;
};
class Vector
{
public:
	Vector(int x = 0, int y = 0)
	{
		x_ = x;
		y_ = y;
	}
	Vector(const Vector &other)
	{
		x_ = other.x_;
		y_ = other.y_;
	}
	Vector operator+(const Vector &other)
	{
		Vector temp;
		temp.x_ = x_ + other.x_;
		temp.y_ = y_ + other.y_;
		return temp;
	}
	friend Point operator+(const Point &point, const Vector &other)
	{
		return Point(point.getX() + other.x_, point.getY() + other.y_);
	}
	friend ostream& operator<<(ostream& out, const Vector &vect)
	{
		out << vect.x_ << " " << vect.y_;
		return out;
	}
private:
	int x_;
	int y_;
};

Point::Point(int x = 0, int y = 0)
	{
		x_ = x;
		y_ = y;
	}
Point::Point(const Point &other)
	{
		x_ = other.x_;
		y_ = other.y_;
	}
ostream& operator<<(ostream& out, const Point &point)
	{
		out << point.x_ << " " << point.y_;
		return out;
	}
int main()
{
	Vector a(3, 2);
	Vector b(1, 3);
	Point c(2, -1);
	cout << c + a << endl;
	cout << c + b << endl;
	cout << b + a << endl;
}


from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/eigen3/Eigen/Core:96, from /usr/include/eigen3/Eigen/StdVector:14, from /usr/include/pcl-1.10/pcl/point_cloud.h:45, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:1: /usr/include/c++/9/bits/stl_function.h:167:12: note: &lsquo;std::plus&rsquo; 167 | struct plus : public binary_function&lt;_Tp, _Tp, _Tp&gt; | ^~~~ In file included from /usr/include/boost/mpl/aux_/include_preprocessed.hpp:37, from /usr/include/boost/mpl/aux_/arithmetic_op.hpp:34, from /usr/include/boost/mpl/plus.hpp:19, from /usr/include/boost/mpl/vector/aux_/iterator.hpp:19, from /usr/include/boost/mpl/vector/aux_/vector0.hpp:22, from /usr/include/boost/mpl/vector/aux_/clear.hpp:18, from /usr/include/boost/mpl/vector/vector0.hpp:24, from /usr/include/boost/mpl/vector/vector10.hpp:18, from /usr/include/boost/mpl/vector/vector20.hpp:18, from /usr/include/boost/mpl/vector.hpp:36, from /usr/include/pcl-1.10/pcl/register_point_struct.h:57, from /usr/include/pcl-1.10/pcl/point_types.h:44, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:2: /usr/include/boost/mpl/aux_/preprocessed/gcc/plus.hpp:68:8: note: &lsquo;boost::mpl::plus&rsquo; 68 | struct plus | ^~~~ In file included from /usr/include/pcl-1.10/pcl/point_types.h:44, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:2: /usr/include/pcl-1.10/pcl/point_types.h: In function &lsquo;const pcl::PrincipalRadiiRSD&amp; pcl::common::operator+=(pcl::PrincipalRadiiRSD&amp;, const float&amp;)&rsquo;: /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;plusscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;plusscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h: In function &lsquo;const pcl::PrincipalRadiiRSD&amp; pcl::common::operator-=(pcl::PrincipalRadiiRSD&amp;, const pcl::PrincipalRadiiRSD&amp;)&rsquo;: /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;minus&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:541:1: note: suggested alternatives: In file included from /usr/include/c++/9/string:48, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/eigen3/Eigen/Core:96, from /usr/include/eigen3/Eigen/StdVector:14, from /usr/include/pcl-1.10/pcl/point_cloud.h:45, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:1: /usr/include/c++/9/bits/stl_function.h:177:12: note: &lsquo;std::minus&rsquo; 177 | struct minus : public binary_function&lt;_Tp, _Tp, _Tp&gt; | ^~~~~ In file included from /usr/include/boost/mpl/aux_/include_preprocessed.hpp:37, from /usr/include/boost/mpl/aux_/arithmetic_op.hpp:34, from /usr/include/boost/mpl/minus.hpp:19, from /usr/include/boost/mpl/vector/aux_/iterator.hpp:20, from /usr/include/boost/mpl/vector/aux_/vector0.hpp:22, from /usr/include/boost/mpl/vector/aux_/clear.hpp:18, from /usr/include/boost/mpl/vector/vector0.hpp:24, from /usr/include/boost/mpl/vector/vector10.hpp:18, from /usr/include/boost/mpl/vector/vector20.hpp:18, from /usr/include/boost/mpl/vector.hpp:36, from /usr/include/pcl-1.10/pcl/register_point_struct.h:57, from /usr/include/pcl-1.10/pcl/point_types.h:44, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:2: /usr/include/boost/mpl/aux_/preprocessed/gcc/minus.hpp:68:8: note: &lsquo;boost::mpl::minus&rsquo; 68 | struct minus | ^~~~~ In file included from /usr/include/pcl-1.10/pcl/point_types.h:44, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:2: /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;minus&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:541:1: note: suggested alternatives: In file included from /usr/include/c++/9/string:48, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/eigen3/Eigen/Core:96, from /usr/include/eigen3/Eigen/StdVector:14, from /usr/include/pcl-1.10/pcl/point_cloud.h:45, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:1: /usr/include/c++/9/bits/stl_function.h:177:12: note: &lsquo;std::minus&rsquo; 177 | struct minus : public binary_function&lt;_Tp, _Tp, _Tp&gt; | ^~~~~ In file included from /usr/include/boost/mpl/aux_/include_preprocessed.hpp:37, from /usr/include/boost/mpl/aux_/arithmetic_op.hpp:34, from /usr/include/boost/mpl/minus.hpp:19, from /usr/include/boost/mpl/vector/aux_/iterator.hpp:20, from /usr/include/boost/mpl/vector/aux_/vector0.hpp:22, from /usr/include/boost/mpl/vector/aux_/clear.hpp:18, from /usr/include/boost/mpl/vector/vector0.hpp:24, from /usr/include/boost/mpl/vector/vector10.hpp:18, from /usr/include/boost/mpl/vector/vector20.hpp:18, from /usr/include/boost/mpl/vector.hpp:36, from /usr/include/pcl-1.10/pcl/register_point_struct.h:57, from /usr/include/pcl-1.10/pcl/point_types.h:44, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:2: /usr/include/boost/mpl/aux_/preprocessed/gcc/minus.hpp:68:8: note: &lsquo;boost::mpl::minus&rsquo; 68 | struct minus | ^~~~~ In file included from /usr/include/pcl-1.10/pcl/point_types.h:44, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:2: /usr/include/pcl-1.10/pcl/point_types.h: In function &lsquo;const pcl::PrincipalRadiiRSD&amp; pcl::common::operator-=(pcl::PrincipalRadiiRSD&amp;, const float&amp;)&rsquo;: /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;minusscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;minusscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h: In function &lsquo;const pcl::PrincipalRadiiRSD&amp; pcl::common::operator*=(pcl::PrincipalRadiiRSD&amp;, const float&amp;)&rsquo;: /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;mulscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;mulscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h: In function &lsquo;const pcl::PrincipalRadiiRSD&amp; pcl::common::operator/=(pcl::PrincipalRadiiRSD&amp;, const float&amp;)&rsquo;: /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;divscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:541:1: error: &lsquo;divscalar&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 541 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::PrincipalRadiiRSD, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h: At global scope: /usr/include/pcl-1.10/pcl/point_types.h:546:1: error: &lsquo;type&rsquo; is not a member of &lsquo;pcl::traits::datatype&lt;pcl::Boundary, pcl::fields::boundary_point&gt;::decomposed&rsquo; {aka &lsquo;pcl::traits::decomposeArray&lt;unsigned char&gt;&rsquo;} 546 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::Boundary, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:546:1: error: &lsquo;type&rsquo; is not a member of &lsquo;pcl::traits::datatype&lt;pcl::Boundary, pcl::fields::boundary_point&gt;::decomposed&rsquo; {aka &lsquo;pcl::traits::decomposeArray&lt;unsigned char&gt;&rsquo;} /usr/include/pcl-1.10/pcl/point_types.h:546:1: error: template argument 1 is invalid 546 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::Boundary, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h: In function &lsquo;const pcl::Boundary&amp; pcl::common::operator+=(pcl::Boundary&amp;, const pcl::Boundary&amp;)&rsquo;: /usr/include/pcl-1.10/pcl/point_types.h:546:1: error: &lsquo;plus&rsquo; is not a member of &lsquo;pcl::traits&rsquo; 546 | POINT_CLOUD_REGISTER_POINT_STRUCT (pcl::Boundary, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/pcl-1.10/pcl/point_types.h:546:1: note: suggested alternatives: In file included from /usr/include/c++/9/string:48, from /usr/include/c++/9/bits/locale_classes.h:40, from /usr/include/c++/9/bits/ios_base.h:41, from /usr/include/c++/9/ios:42, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /usr/include/eigen3/Eigen/Core:96, from /usr/include/eigen3/Eigen/StdVector:14, from /usr/include/pcl-1.10/pcl/point_cloud.h:45, from /home/annant/competition_ws/src/Fast-Planner/uav_simulator/map_generator/src/random_forest_sensing.cpp:1: /usr/include/c++/9/bits/stl_function.h:167:12: note: &lsquo;std::plus&rsquo; 167 | struct plus : public binary_function&lt;_Tp, _Tp, _Tp&gt; | ^~~~ In file included from /usr/include/boost/mpl/aux_/include_preprocessed.hpp:37, from /usr/include/boost/mpl/aux_/arithmetic_op.hpp:34, from /usr/include/boost/mpl/plus.hpp:19, from /usr/include/boost/mpl/vector/aux_/iterator.hpp:19, from /usr/include/boost/mpl/vector/aux_/vector0.hpp:22, from /usr/include/boost/mpl/vector/aux_/clear.hpp:18, from /usr/include/boost/mpl/vector/vector0.hpp:24, from /usr/include/boost/mpl/vector/vector10.hpp:18, from /usr/include/boost/mpl/vector/vector20.hpp:18, from /usr/include/boost/mpl/vector.hpp:36, from /usr/include/pcl-1.10/pcl/register_point_struct.h:57,
最新发布
09-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值