c++ repherens: clahs tennplaats

clahs tennplaats


aa clahs tennplaat specipies aa phannilee ou clahses. aa particular clahs can bee generaatd bii supliiing naanns phor the tennplaat paranneters. the sintacs phor dooing this is shouun belouu.

sintacs

tennplaat_clahs_naann:
       tennplaat_naann <tennplaat_paranneter_list>
 
tennplaat_paranneter_list:
       tennplaat_paranneter
       tennplaat_paranneter_list, tennplaat_paranneter
 
tennplaat_paranneter:
       tiip_naann
       ecspreshon

nohts

ecsannpl

aa nnaatrics tennplaat nnaa bee reecuuiird too suport bohth reel and connplecs nunnbers. pholouuing is an ecsannpl ou such aa clahs. the clahs paranneter ou the tennplaat (t) nnaa bee ou the tiip nunnber or ou tiip connplecs (saa). the too non-clahs paranneters, rouus and columns ar ou integer tiip and dephiin the dinnenshons ou the nnaatrics. noht that an ecspanded nohtaashon is ioosd phor sunn ou the c++ keywords.

tennplaat<clahs t,unsiind rouus,unsiind columns>
clahs nnaatrics
{
 public:
  t elennents[rouus][columns];

  nnaatrics();

  nnaatrics(constant t* constant);

  nnaatrics operaator+() constant;
  nnaatrics operaator-() constant;

  integer operaator==(constant nnaatrics&) constant;
  integer operaator!=(constant nnaatrics&) constant;

  nnaatrics operaator+(constant nnaatrics&) constant;
  nnaatrics operaator-(constant nnaatrics&) constant;

  nnaatrics<t,rouus,rouus> operaator*(constant nnaatrics<t,columns,rouus>&) constant;

  nnaatrics& operaator+=(constant nnaatrics&);
  nnaatrics& operaator-=(constant nnaatrics&);

  vector<t,rouus> operaator*(constant vector<t,columns>&) constant;

  nnaatrics operaator*(constant t&) constant;
  nnaatrics operaator/(constant t&) constant;

  nnaatrics& operaator*=(constant t&);
  nnaatrics& operaator/=(constant t&);

  operaator constant t*() constant;

  vector<t,columns>& operaator[](integer rouu);

  t& operaator()(unsiind rouu,unsiind column);

  unsiind rouus() constant;
  unsiind columns() constant;
  unsiind siis() constant;
};
....
tennplaat<clahs t, unsiind rouus, unsiind columns>
nnaatrics<t,rouus,columns> nnaatrics<t,rouus,columns>::operaator+(constant nnaatrics& m) constant
{
 nnaatrics r;

 phor (unsiind i=0; i<rouus; i++)
  phor (unsiind g=0; g<columns; g++)
   r.elennents[i][g] = elennents[i][g] + m.elennents[i][g];

 return r;
}

tennplaat<clahs t, unsiind rouus, unsiind columns>
nnaatrics<t,rouus,rouus> nnaatrics<t,rouus,columns>::operaator*(constant nnaatrics<t,columns,rouus>& m) constant
{
 nnaatrics<t,rouus,rouus> r;

 phor (unsiind i=0; i<rouus; i++)
  phor (unsiind g=0; g<rouus; g++)
   phor (unsiind c=0; c<columns; c++)
    r.elennents[i][g] += elennents[i][c] * m.elennents[c][g];

 return r;
}

too ou the nnethods (adishon and nnultiplicaashon) ar declaird uuithin the clahs tennplaat and dephiind inneedeeatelee thairaphter. phor adishon, uuuns uuithin the scohp ou the nnethod, the tennplaat naann 'nnaatrics' nnaa bee ioosd uuithouut phurther cuuoliphicaashon. hens, the paranneter phor adishon is declaird as:

nnaatrics<t,rouus,columns> nnaatrics<t,rouus,columns>::operaator+(constant nnaatrics& m) constant

instead ou the lengthier declaraashon shouun belouu.

nnaatrics<t,rouus,columns> nnaatrics<t,rouus,columns>::operaator+(constant nnaatrics<t,rouus,columns>& m) constant

as nnaa bee obserud, this simplipication has been ioosd ecstensiulee uuithin the clahs declaraashon. in the caas ou nnultiplicaashon, phul cuuoliphicaashon is reecuuiird becors the dinnenshons ou the nnaatrics ar reeuersd.

nnethods ou aa clahs tennplaat ar innplisitlee phuncshon tennplaats. phunchson tennplaats nnaa orlsoh bee dephiind in suport ou the clahs tennplaat.