Прежде чем продолжать разговаривать о классах, нам нужно знать, что такое перегруженные функции.
Допустим, нам нужны две одинаковые функции, работающие с разными типами данных. В одну функцию передаётся аргумент типа int, а в другую - типа float. В данном случае для двух функций можно использовать одно имя. Такие функции и называются перегруженными:
int function (int x){ return 0;} int function (float x){ return 0;}
Здесь, на самом деле, определены две функции, но с одним именем. Дело в том, что компилятор смотрит не только на имя, но и на количество и типы аргументов функции. При этом тип возвращаемого значения не учитывается и при попытке определить следующие функции, компилятор выдаст ошибку:
int function (int x){ return 0;} float function (int x){ return 0;}
Полный код программы.
#include <tchar.h>
#include <iostream>
#include <conio.h>
using namespace std;
class Vector
{
private:
int x;
int y;
int z;
public:
Vector () : x(0),y(0),z(0)
{}
Vector (int vx,int vy,int vz) : x(vx),y(vy),z(vz)
{}
void showVector()
{
cout<<x<<":"<<y<<":"<<z<<"";
}
void showProizVector()
{
cout<<x+y+z<<"";
}
Vector operator+(Vector)const;
Vector operator%(Vector)const;
Vector operator*(Vector)const;
double alpha();
};
//Сложение
Vector Vector :: operator+ (Vector d2)const
{
int vx = x + d2.x;
int vy = y + d2.y;
int vz = z + d2.z;
return Vector(vx,vy,vz);
}
//Скалярное произведение
Vector Vector :: operator% (Vector d2)const
{
int vx = x*d2.x;
int vy = y*d2.y;
int vz = z*d2.z;
return Vector((vx+vy+vz),vx*0,vy*0);
}
//Векторное произведение
Vector Vector :: operator* (Vector d2)const
{
int vx = y*d2.z-z*d2.y;
int vy = z*d2.x-x*d2.z;
int vz = x * d2.y - y * d2.x;
return Vector((vx+vy+vz),vx*0,vy*0);
}
double Vector :: alpha() // + Реализация метода угла