C++ Szablon klasy dla liczb zespolonych
Ostatnio zmodyfikowano 2016-05-05 23:49
jolkaaa3 Temat założony przez niniejszego użytkownika |
C++ Szablon klasy dla liczb zespolonych » 2016-05-05 13:56:56 |
|
carlosmay |
» 2016-05-05 16:24:08 |
|
mateczek |
» 2016-05-05 18:22:12 ale czy naprawdę do tego potrzeba szablonów ?? #include <iostream> using namespace std;
class zespolone { double real; double uroj; public: zespolone( double r, double i ) { real = r; uroj = i; } zespolone() { real = 0; uroj = 0; } zespolone operator +( zespolone & z ) { zespolone temp; temp.real = real + z.real; temp.uroj = uroj + z.uroj; return temp; } friend ostream & operator <<( ostream & s, zespolone & z ); }; ostream & operator <<( ostream & s, zespolone & z ) { return s << z.real << ",j" << z.uroj; }
int main() { int r = 5; double j = 4.6; zespolone z1( r, j ); zespolone z2( 3, 5 ); zespolone z3 = z1 + z2; cout << z3 << endl; }
|
|
carlosmay |
» 2016-05-05 18:38:51 ale czy naprawdę do tego potrzeba szablonów ?? |
Takie mają zadanie. można stworzyć np. typ Zesp<double>, Zesp<int> |
Jak zrobić to inaczej? Zesp < int > zesp_1, zesp_2;
std::cout << zesp_1 + zesp_2 << std::endl; std::cout << zesp_1 + 2 << std::endl; std::cout << 2 + zesp_2 << std::endl; |
|
jolkaaa3 Temat założony przez niniejszego użytkownika |
» 2016-05-05 20:41:09 Muszę napisać program właśnie za pomocą szablonu. |
|
carlosmay |
» 2016-05-05 23:49:31 Szablony funkcjiSzablony klasSzablony funkcji - 4programmerstemplate < typename Type > class Complex { Type m_real; Type m_image; public: Complex( Type re = 0, Type im = 0 ) : m_real( re ) , m_image( im ) { } ~Complex() { } Type getReal() const { return m_real; } Type getImage() const { return m_image; } Complex operator +( const Complex & z ) { Complex temp = * this; return temp += z; } Complex operator +( Type num ) { } friend Complex < Type > operator +( Type num, const Complex < Type >& z ) { } Complex operator +=( const Complex & z ) { this->m_real += z.m_real; this->m_image += z.m_image; return * this; } Complex operator +=( Type num ) { } template < typename Type > friend std::ostream & operator <<( std::ostream & os, const Complex < Type >& z ) { return os << "[" << z.m_real << " + " << z.m_image << "]"; } };
int main() { Complex < int > a( 1, 2 ); Complex < int > b( 2, 4 ); std::cout <<( a + b ) << std::endl; std::cout << "[" << a.getReal() << " + " << a.getImage() << "]" << std::endl; }
opertor += dodałem od siebie. Jeśli nie może go być, trzeba skorzystać z pierwszej opcji w operator + (tej zakomentowanej). edit: Poprawiłem kod, bo nie do końca zgodny był z zasadami. operatro + w swoim ciele zabezpiecza lewy operand dodawania przed nadpisaniem, stosując obiekt tymczasowy. Dopiero ten zastąpiony (lewy) używa operator += z prawym operandem. W przeciwnym razie zwykłe dodawanie powoduje nadpisanie wartości lewego operandu, co jest nieprawidłowym zachowaniem. Poprzedni kod też liczył poprawnie, lecz zabezpieczenie było w operator += , gdzie tworzony był obiekt tymczasowy, przy wywołaniu skróconego operatora dodawanie += (nadmiarowa operacja). |
|
« 1 » |