Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 17:42   #1
Evgen.O
 
Регистрация: 11.12.2011
Сообщений: 8
По умолчанию Перегрузка операции

Запрограммировать и протестировать заданную перегруженную операцию,
содержащуюся в классе, производном от заданного класса VECTOR.
V - объект, которому принадлежит метод (перегруженная операция),
L – локальный объект (определяется как копия V),
F – формальный объект, a – скаляр, A – массив, j=0,1,…,n-1
Пример. Скалярное произведение векторов:
V*a{V.xj = V.xj*(V. xj+a); возвращается V.}
Код:
#include <stdio.h>
#include <alloc.h>
#include <math.h>
#include <conio.h>
#include <iostream.h>
 struct VECTOR{int n; float*x;
 void nw(){x=new float[n];}
// default  constructor:
 VECTOR(){n=0;x=0;}
// constructor with 1 arg. :
 VECTOR(int fn){n=fn; nw();}
// constructor with 2 arg. :
 VECTOR(int n,float*x);
// copying  constructor:
 VECTOR(VECTOR&v);
// destructor:
~VECTOR(){if(x)delete[]x;}
//V=F {V.n=F.n;V.x[j]=F.x[j];return*this==V
//(we can write V1=V2=V3 due to VECTOR&)}:
 VECTOR&operator=(VECTOR&F);
//  V() {output V.x[0], V.x[1],... }:
 void operator()(FILE*f);
// V[j] {return V.x[j]
//(we can write V1[i]=V2[j]=V3[k] due to float&...)}:
 float&operator[](int j){return x[j];}
 }; // end of VECTOR body
  VECTOR::VECTOR(int fn,float*fx)
{n=fn; nw(); for(int j=0;j<n;++j)x[j]=fx[j];}
  VECTOR::VECTOR(VECTOR&F)
{n=F.n;nw();for(int j=0;j<n;++j)x[j]=F.x[j];}
  VECTOR&VECTOR::operator=(VECTOR&F)
{if(x)delete[]x; n=F.n;nw();
for(int j=0;j<n;++j)x[j]=F.x[j];return*this;}
  void VECTOR::operator()(FILE*f=stdout)
{for(int j=0;j<n;++j)fprintf(f,"% -7g",x[j]);}
// end of VECTOR
 
// independant function:
  float operator*(VECTOR&v1, VECTOR&v2)
{float a=0; for(int j=0;j<v1.n;++j)
a+=v1.x[j]*v2.x[j]; return a;}
struct DV:VECTOR{DV():VECTOR(){}DV(int fn):VECTOR(fn){}
DV(int n,float*x):VECTOR(n,x){};
DV(DV&v):VECTOR(v){}
DV operator%(float a);
}; // end of DV body
  DV DV::operator%(float a)
{DV L(*this);
for(int j=0;j<n;++j)L.x[j]=(int)x[j]%(int)a;return L;}
// end of DV
 
  void main()
{cout<<"\n\n mem0="<<coreleft()<<'\n';
 {int n=3; float y[3]={1,2,3};
{ DV dv(n,y),d(dv);
   cout<<"\n  dv(); ->"; dv();
  d=dv%2; cout<<"\n d=dv%2; d(); ->"; d();
 cout<<"\n mem="<<coreleft()<<'\n';
}
 }cout<<"\n mem="<<coreleft(); getch();
}
По программе вопросов нет.Программа перегружается.Вопрос заключается в создании блок-схемы, неясно как показать перегруженную операцию,содержащуюся в классе, производном от заданного класса VECTOR.
Evgen.O вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка в С++ anna01 Общие вопросы C/C++ 2 23.11.2010 22:21
перегрузка операции со счетом zhenya.ya Общие вопросы C/C++ 0 03.10.2010 23:52
перегрузка DRELORD Помощь студентам 1 22.04.2010 09:54
Перегрузка операции "->*" C++ Geg[C/c++] Общие вопросы C/C++ 3 15.12.2009 12:49
Перегрузка nevermind_111 Общие вопросы .NET 2 14.10.2009 12:40