Freigeben über


Basic Math Functions

Veranschaulicht, wie einige grundlegende mathematische Funktionen in der Standardvorlagenbibliothek (STL) in Visual C++ verwendet.

template<class _TYPE>
   struct plus : binary_function<_TYPE, _TYPE, _TYPE>
   {
      _TYPE operator()(const _TYPE& _X, const _TYPE& _Y) const
      {return (_X + _Y); }
   };
template<class _TYPE>
   struct minus : binary_function<_TYPE, _TYPE, _TYPE>
   {
      _TYPE operator()(const _TYPE& _X, const _TYPE& _Y) const
      {return (_X - _Y); }
   };
template<class _TYPE>
   struct times : binary_function<_TYPE, _TYPE, _TYPE>
   {
      _TYPE operator()(const _TYPE& _X, const _TYPE& _Y) const
     {return (_X * _Y); }
   };
template<class _TYPE>
   struct divides : binary_function<_TYPE, _TYPE, _TYPE>
   {
      _TYPE operator()(const _TYPE& _X, const _TYPE& _Y) const
      {return (_X / _Y); }
   };
template<class _TYPE>
   struct modulus : binary_function<_TYPE, _TYPE, _TYPE>
   {
      _TYPE operator()(const _TYPE& _X, const _TYPE& _Y) const
      {return (_X % _Y); }
   };

Hinweise

HinweisHinweis

Die Klasse/Parameternamen im Prototyp stimmen nicht mit der Version in der Headerdatei ab.Einige wurden geändert, um die Lesbarkeit zu verbessern.

In diesem Beispiel wird eine Klasse, die von allen fünf grundlegenden mathematischen Strukturen abgeleitet wurde: Pluszeichen, Mangel, multiplizieren, Division und Modulo unter Verwendung einer ganzen Zahl als ein auf Vorlagen basierendes Operand.

Beispiel

// mathfunc.cpp
// compile with: /EHsc
// 
// Structures: plus<A>    - Adds data type A object to
//                          a class object derived from plus.
//             minus<A>   - Subtracts data type A.
//             multiplies<A>   - Multiplies object by data type A.
//             divides<A> - Divides object by data type A.
//             modulus<A> - Returns object modulo A.

#include <functional>
#include <iostream>

using namespace std ;

class MathOps : public plus<int>, public minus<int>,
                 public multiplies<int>, public divides<int>,
                 public modulus<int>
{
public:
  int value;
  MathOps(){value=0;}
  MathOps(int x){value=x;}
  result_type operator+(second_argument_type add2)
                            {return value + add2;}
  result_type operator-(second_argument_type sub2)
                            {return value - sub2;}
  result_type operator*(second_argument_type mult2)
                            {return value * mult2;}
  result_type operator/(second_argument_type div2)
                            {return value / div2;}
  result_type operator%(second_argument_type mod2)
                            {return value % mod2;}
  friend ostream& operator<<(ostream& os, const MathOps& obj ) ;
};

ostream& operator<<(ostream& os, const MathOps& obj )
{
       os << obj.value ;
       return os ;
}

int main(void)
{
  MathOps one,two,three,four,five,six;

  cout << "Using MathOps class..." << endl ;

  one = 18;
  cout << "one = " << one << endl ;

  two = one + 1;
  cout << "two = one + 1 = " << two << endl ;

  three = two - 2;
  cout << "three = two - 2 = " << three << endl ;

  four = three * 3;
  cout << "four = three * 3 = " << four << endl ;

  five = four / 4;
  cout << "five = four / 4 = " << five << endl ;

  six = five % 5;
  cout << "six = five % 5 = " << six << endl ;
}

Output

Using MathOps class...
one = 18
two = one + 1 = 19
three = two - 2 = 17
four = three * 3 = 51
five = four / 4 = 12
six = five % 5 = 2

Anforderungen

Header: <functional>

Siehe auch

Referenz

<functional>

Konzepte

Standardvorlagenbibliotheks-Beispiele

Weitere Ressourcen

<functional> Member

<valarray> Member