刚学习C++,对它的理解还停留在数据成员和成员函数,这里遇到运算符重载的填空题,解决不了
#include <iostream>
#include <vector>
using namespace std;
class vec3 {
public:
vec3(int x=0, int y=0, int z=0)
{
v[0] = x;
v[1] = y;
v[2] = z;
}
int operator[]
{
return v[index];
}
vec3& operator+=(const vec3& rhs)
{
for (int i = 0; i < 3; ++i)
;
return *this
;
}
private:
int v[3];
};
vec3 operator+(const vec3& v1, const vec3& v2)
{
return
;
}
operator<<(ostream& out, const vec3& v)
{
out << '(' << v[0] << ' ' << v[1] << ' ' << v[2] << ')';
;
}
int main()
{
vec3 v1(1,2,3), v2(4,5,6);
vec3 v = v1 + v2;
v += v2;
cout << v << endl;
}
还不太明白重载的原理
希望能给出题目答案的同时,给出一些思路上的指导
#include <iostream>
#include <vector>
using namespace std;
class vec3 {
public:
vec3(int x=0, int y=0, int z=0)
{
v[0] = x;
v[1] = y;
v[2] = z;
}
int operator[] (int index) const // 1
{
return v[index];
}
vec3& operator+=(const vec3& rhs)
{
for (int i = 0; i < 3; ++i)
v[i] += rhs[i]; // 2
return *this; // 3
}
private:
int v[3];
};
vec3 operator+(const vec3& v1, const vec3& v2)
{
return vec3(v1[0]+v2[0], v1[1]+v2[1], v1[2]+v2[2]); // 4
}
ostream& operator<<(ostream& out, const vec3& v) // 5
{
out << '(' << v[0] << ' ' << v[1] << ' ' << v[2] << ')';
return out; // 6
}
int main()
{
vec3 v1(1,2,3), v2(4,5,6);
vec3 v = v1 + v2;
v += v2;
cout << v << endl;
}
运算符重载关注几个问题:
1、重载函数是否作为类的成员函数,作为成员函数的话有一个默认参数this代表左操作数。也就是说如果是加法,重载函数作为成员函数只需要写一个右操作数,而作为非成员函数需要写两个参数(左操作数,右操作数)。
2、const关键字的使用
3、this的使用
4、一些特殊运算符的重载,比如++,<<, >>
从上到下是
int operator[] (int index)
v[i] += rhs[i]
return *this
return v1+=v2
ostream&
return out