Copyright (C) 2000-2012 |
GNU Info (gmp.info)C++ Interface GeneralC++ Interface General ===================== All the C++ classes and functions are available with #include <gmpxx.h> The classes defined are - Class: mpz_class - Class: mpq_class - Class: mpf_class The standard operators and various standard functions are overloaded to allow arithmetic with these classes. For example, int main (void) { mpz_class a, b, c; a = 1234; b = "-5678"; c = a+b; cout << "sum is " << c << "\n"; cout << "absolute value is " << abs(c) << "\n"; return 0; } An important feature of the implementation is that an expression like `a=b+c' results in a single call to the corresponding `mpz_add', without using a temporary for the `b+c' part. Expressions which by their nature imply intermediate values, like `a=b*c+d*e', still use temporaries though. The classes can be freely intermixed in expressions, as can the classes and the standard C++ types. Conversions back from the classes to standard C++ types aren't done automatically, instead member functions like `get_si' are provided (see the following sections for details). Also there are no automatic conversions from the classes to the corresponding GMP C types, instead a reference to the underlying C object can be obtained with the following functions, - Function: mpz_t mpz_class::get_mpz_t () - Function: mpq_t mpq_class::get_mpq_t () - Function: mpf_t mpf_class::get_mpf_t () These can be used to call a C function which doesn't have a C++ class interface. For example to set `a' to the GCD of `b' and `c', mpz_class a, b, c; ... mpz_gcd (a.get_mpz_t(), b.get_mpz_t(), c.get_mpz_t()); In the other direction, a class can be initialized from the corresponding GMP C type, or assigned to if an explicit constructor is used. In both cases this makes a copy of the value, it doesn't create any sort of association. For example, mpz_t z; // ... init and calculate z ... mpz_class x(z); mpz_class y; y = mpz_class (z); There are no namespace setups in `gmpxx.h', all types and functions are simply put into the global namespace. This is what `gmp.h' has done in the past, and continues to do for compatibility. The extras provided by `gmpxx.h' follow GMP naming conventions and are unlikely to clash with anything. automatically generated by info2www version 1.2.2.9 |