#include <iostream>
using namespace std;
class vect{
double* b; //ìàññèâ
int dim; //ðàçìåðíîñòü
static int count;
public:
int num;//íîìåð êîíêðåòíîãî âåêòîðà
vect();
vect(int n, double x[]);
vect(vect &x);
~vect();
void print();
void operator= (vect &r);
vect operator +(vect &r);
friend vect * operator-(vect &l, vect &r);
vect operator-(); //óíàðíûé ìèíóñ
friend vect * operator*(double k, vect &r);
friend vect * operator*(vect &r, double k);
friend vect * operator*(vect &r, vect &l);
};
int vect::count=0;
vect::vect(){
b = 0;
dim = 0;
count++;
num = count;
cout<<"Konstruktor vect() sozdal vector - "<<num<<endl;
}
vect::vect(int n, double x[]){
count++;
num = count;
dim=n;
b=new double[dim];
for(int i=0; i<dim;i++)
b[i]=x[i];
cout<<"Konstruktor vect(int n, double x[]) sozdal vector - "<<num<<endl;
}
vect::vect(vect &x){
count++;
num = count;
dim = x.dim;
b = new double [x.dim];
for(int i = 0; i<dim; i++ ){
b[i] = x.b[i];
}
cout<<"Konstruktor vect(vect &x) sozdal vector - "<<num<<endl;
}
void vect::print(){
cout<< "dim vectora:" << " " << dim<< endl;
cout<< "Vector: ";
cout << "{ ";
for(int i=0; i<dim; i++)
{
cout << b[i] << (i!=dim-1 ? ", " : "");
}
cout << " }" << endl;
}
vect::~vect(){
delete []b;
cout<<"Uni4tozhaem vector - "<<num<<endl;
}
void vect::operator=(vect &r){
if (b == NULL) {
dim = r.dim;
b = new double[dim];
}
for (int i = 0; i<dim; i++) {
b[i] = r.b[i];
}
cout<<"Peregruzka operatora ="<<endl;
}
vect vect::operator+(vect &r){
cout<<"Summirovanie: vector "<< num << "+ vector "<<r.num<<endl;
if(b==NULL){
dim = r.dim;
b = new double[dim];
}
for (int i = 0 ; i<dim; i++) {
b[i] += r.b[i];
}
cout<<"Vypolnyaetsya slozhenie"<<endl;
return *this;
}
vect vect::operator-(){
for (int i = 0; i<dim; i++) {
b[i] = 0 - b[i];
}
cout<<"Unarniy minus"<<endl;
return *this;
}
vect* operator *(vect &r, double k){
for (int i = 0; i<r.dim; i++) {
r.b[i] = r.b[i] *k;
}
cout<<"Peregruzka operatora *"<<endl;
return &r;
}
vect* operator *(double k, vect &r){
for (int i =0; i<r.dim; i++) {
r.b[i] = r.b[i] *k;
}
cout<<"Peregruzka operatora *"<<endl;
return &r;
}
vect* operator *(vect &r, vect &l){
for (int i = 0 ; i<r.dim; i++) {
r.b[i] = r.b[i] * l.b[i];
}
cout<<"Peregruzka operatora *"<<endl;
return &r;
}
vect* operator-(vect &l, vect &r){
for (int i = 0; i<r.dim; i++) {
l.b[i] = l.b[i] - r.b[i];
}
cout<<"Peregruzka operatora -"<<endl;
return &l;
}
/*class matr
{
static int count;
double *a;//iaiiia?iue iannea ?acia?iinoe dim^2
int dim;
public:
int num;
matr();
matr(int n); //aaeie?iay iao?eoa ?acia?iinoe n
matr(int n, double *x); //nicaaiea iieiioaiiie iao?eou
matr(matr &x); //eiino?oeoi? eiie?iaaiey
~matr(); //aeno?oeoi?
void print(); // ia?aou
void operator =(matr &r);//eiino?oeoi? i?e?aaieaaiey
matr operator +(matr &r);//eiino?oeoi? nei?aiey
matr operator -(); //oia?iue ieion
friend matr operator -(matr &r);//eiino?oeoi? au?eoaiey
matr operator *(matr &r);//eiino?oeoi? oiii?aiey iao?eo
friend matr operator *(double k, matr&r);//oiii?aiea iao?eou ia ?enei
//friend vect & operator *(matr&r, vect &r); // oiii?aiea iao?eou ia aaeoi?
};
int matr::count=0;
matr:: matr()
{count++;
num=count;
cout<<"Konstructor matr() sozdal matr ?"<<num<<endl;
}
matr:: matr(int n)
{count ++;
num=count;
dim = n;
a=new double [dim*dim];
for (int i=0; i<dim; i++)
{
for (int j=0; j<dim; j++)
if (i=j) a[i*j]=1; else a[i*j]=0;
}
cout<<"Konstructor matr(int n) sozdal matr ?"<<num<<endl;
}
matr:: matr(int n, double *x)
{
count ++;
num=count;
dim = n;
a=new double [dim*dim];
for (int i=0; i<dim; i++)
for (int j=0; j<dim; j++)
a[i*j]=x[i*j];
cout<<"Konstructor matr(int n, double *x) sozdal matr ?"<<num<<endl;
}
matr:: matr(matr &x)
{
count ++;
num=count;
dim=x.dim;
a=new double [dim*dim];
for (int i=0; i<dim; i++)
for (int j=0; j<dim; j++)
a[i*j]=x.a[i*j];
cout<<"Konstructor vect (vect &x) sozdal matr ?"<<num<<"copy matr"<<x.dim<<endl;
}
matr:: ~matr()
{
//for (int i=0; i<dim; i++)
//for (int j=0; j<dim; j++)
delete []a;
cout<<"delete matr ?"<<num<<endl;
}
void matr:: print () //eiino?oeoi? ia?aoe
{cout<<"dim="<<dim;
for (int i=0; i<dim; i++)
{
cout<<endl;
for (int j=0; j<dim; j++)
cout<<a[i*j]<<" ";
}
}
void matr:: operator =(matr &r)
{
dim=r.dim;
if (a==NULL)
a=new double [dim*dim];
else{
for (int i=0; i<dim; i++)
for (int j=0; j<dim; j++)
a[i*j]=r.a[i*j];
cout<<"operator = priravnyal matr"<<num<<endl;
return;
}
}
matr matr::operator +(matr &r)
{
double *y=new double [r.dim];
for (int i=0; i<r.dim; i++)
for (int j=0; j<r.dim; j++)
y[i*j]=0;
matr tmp(r.dim, y);
for(int i=0; i<r.dim; i++)
for(int j=0; j<r.dim; j++)
tmp.a[i*j]=a[i*j]+r.a[i*j];
return tmp;
cout<<"Summirovanie: matr ?"<<num<<"and matr ?"<<r.num;
}
matr matr:: operator -()
{
for (int i=0; i<dim; i++)
for (int j=0; j<dim; j++)
a[i*j]= 0 - a[i*j];
cout<<"Konstructor unary minus izmenil matr ?"<<num<<endl;
return *this;
}
matr operator -(matr &l, matr &r)
{
matr tmp=l;
for (int i=0; i<l.dim; i++)
for (int j=0; j<l.dim; j++)
tmp.a[i*j]-=r.a[i*j];
cout<<"konstruktor - vychel matr "<<r.num<<" iz matr "<<l.num;
return tmp;
}
matr operator *(double k, matr&r)
{
for (int i=0; i<r.dim; i++)
for (int j=0; j<r.dim; j++)
r.a[i*j]=k*r.a[i*j];
cout<<"konstruktor * na chislo umnozil vect"<<r.num<<"na chislo"<<k<<endl;
return r;
}
*/
int main() {
int dim = 3;
double *b = new double [dim];
b[0] = 3;
b[1] = 3;
b[2] = 3;
int dim2 = 3;
double *b1 = new double [dim2];
b1[0] = 2;
b1[1] = 2;
b1[2] = 2;
vect a1(dim, b);
vect a2(dim2, b1);
a1*a2;
a1.print();
a2.print();
system("PAUSE");
return 0;
}