I certainly would recommend to use vectors over arrays. You have have seen how error prone it is to work with pointers and dynamic arrays. There is no performance difference between arrays and vectors. Vectors internally use arrays but handle the memory for you.
There is no real difference between classes and structs. Only difference is that in classes everything is private by default, in structs everything is public by default.
If the compilier demands a return value, you must supply it in the function body. Very often, the return value is just itself - return (*this);
void return value is fine too, but later you will definitely learn to choose the most approriate return value for each your operator functions. No worries there :)