Ahoj,
nevíte někdo, jak přetížit oerátor ^ tak, aby fungoval jako mocnina?
mám šablonu nějak takhle:
template <class T> class pole{
T* hodnota;
unsigned velikost_x,velikost_y;
public:
pole(){...};
~pole(){...};
T& operator[] (unsigned i) {return hodnota[i];}
...
...
...
}
Jak teď na tu mocninu, aby pak fungovalo:
pole<float> u;
u[i]^2;
Díky za každé vodítko
Fórum › C / C++
Přetížení operátoru ^
#include <iostream>
#include <cmath>
template<class T>
struct test;
// globalni verze
template<typename T>
T operator^(const test<T>& obj, size_t exp);
template<class T>
struct test
{
T m_Num;
typedef T value_type;
typedef size_t size_type;
test(const T num = T())
:m_Num(num)
{}
// nebo tridni verze - povsni si rozdilu(bere se pouze jeden parametr!!!)
/*inline value_type operator^(size_type exp)
{ return pow(m_Num, exp);
}*/
};
template<typename T>
T operator^(const test<T>& obj, size_t exp)
{
return pow(obj.m_Num, exp);
}
int main()
{
test<int> t(5);
std::cout << (t^2) << std::endl;
return 0;
}
#include <iostream>
#include <cmath>
template<class T>
struct test;
// globalni verze
template<typename T>
T operator^(const test<T>& obj, size_t exp);
template<class T>
struct test
{
T m_Num;
typedef T value_type;
typedef size_t size_type;
test(const T num = T())
:m_Num(num)
{}
// nebo tridni verze - povsni si rozdilu(bere se pouze jeden parametr!!!)
/*inline value_type operator^(size_type exp)
{ return pow(m_Num, exp);
}*/
};
template<typename T>
T operator^(const test<T>& obj, size_t exp)
{
return pow(obj.m_Num, exp);
}
int main()
{
test<int> t(5);
std::cout << (t^2) << std::endl;
return 0;
}
Ještě malý dotaz:
proč musí být t^2 v závorce?
std::cout << (t^2) << std::endl;
dlouho jsem se s tim mořil, ale je to tak, jinak ten operátor vrací objekt :-)). Pak taky
std::cout << (t^2+2) << std::endl;
funguje jako
std::cout << (t^4) << std::endl;
prosím trošku o objasnění (nepotřebuji řešení, takhle mi to postačuje), moc jsem toho o tomto tématu nevygoogloval.
Byl to jen ilustrační přiklad použití, samozřejmě taky si to můžeš přepsat na:
...
test<int> t(2);
int iResult = t^2; // bez závorek
std::cout << iResult << std::endl;
...
Jinak to, že se ti to vyhodnocuje v jiném pořadí, než je pořadí matematický operátorů, je dáno tím, že jazyk C/C++ má nějakou prioritu operátorů. A pokud se na ni koukneš, tak zjistíš, že operátor + má vyšší prioritu než operátor ^. Bohužel(bohudík) je to dáno jazykem a nic s tím neuděláš.
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 2 hosté
Podobná vlákna
Přetížení operátoru << — založil vollf82
Vícenásobné přetížení operatoru THIS — založil Pawl
Přetížení [] — založil koudiss
Pretizeni [] .... — založil janek
Moderátoři diskuze