Nitr0Skay Temat założony przez niniejszego użytkownika |
Z czego wynika konieczność użycia operatora * przy obiekcie ? » 2015-11-01 11:00:15 Witam. Napisałem póki co prototyp pewnej klasy, jeszcze nie skończonej, jednak próbując odpalić program aby zobaczyć, czy nie wypluł on żadnych błędów natrafiłem na pewien błąd: error: conversion from 'BigNumber*' to non-scalar type 'BigNumber' requested| Oto kod, który to wywołuje: #include <iostream> #include <string.h> #include <sstream>
class BigNumber { public: const static short ZERO = 0; const static short ONE = 1; private: std::string number; public: BigNumber( std::string ); BigNumber( long double ); };
BigNumber::BigNumber( std::string number ) { this->number = number; }
BigNumber::BigNumber( long double Dnumber ) { std::stringstream buffer; std::string number; buffer << Dnumber; buffer >> number; this->number = number; }
int main() { BigNumber x = new BigNumber( 25 ); }
No i zaważyłem, że użycie operatora gwiazdki * załatwia sprawę i program się uruchamia. Mniej więcej tak to wygląda: BigNumber * x = new BigNumber( 25 );
Jednak nie daje mi to spokoju. Z czego wynika owa konieczność i co mogę zrobić, abym nie musiał przy obiekcie korzystać z tego operatora, przy jego tworzeniu ? Innymi słowy, co w tej klasie powoduje ową zależność ?? Z góry dziękuję za odpowiedź :) |
|
j23 |
» 2015-11-01 11:16:14 new tworzy obiekt na stercie i zwraca do niego wskaźnik, dlatego po lewej stronie przypisania powinna być zmienna wskaźnikowa. Musiałeś dodać * między typ a nazwę zmiennej, ponieważ taka jest składnia definiowania wskaźników w C/C++. Podsumowując; BigNumber x; tutaj definiujesz obiekt x typu BigNumber. BigNumber * x; a tu wskaźnik x na obiekt typu BigNumber. |
|
michal11 |
» 2015-11-01 11:16:47 Operator new, który alokuje pamięć, zwraca adres (wskaźnik) miejsca w pamięci pod którym znajduje się utworzony obiekt. Skoro operator new zwraca wskaźnik to musisz go przypisać właśnie do zmiennej która jest wskaźnikiem a nie obiektem. |
|
Nitr0Skay Temat założony przez niniejszego użytkownika |
» 2015-11-03 17:58:33 Przepraszam za mój brak reakcji. Wracam do pracy Co do tematu no i Waszych odpowiedzi - No tak. Zapomniałem o tym. Nie da się jakoś tego ominąć ?? Bowiem w Javie tworzenie obiektu wygląda w ten sposób: BigInteger x = new BigInteger( "-22222222222222222222" );
Powiedzmy, że chciałbym coś podobnego osiągnąć w C++ - połączyć klasy BigInteger i BigDecimal z Javy i napisać klasę BigNumber w C++. Dokładne odzwierciedlenie. Dlatego zastanawiam się, czy jest możliwe osiągnięcie podobnego zapisu do powyższego z Javy, w C++. Dałoby radę ? Czy mimo wszystko musiałbym inaczej kombinować ? |
|
Fireho |
» 2015-11-03 18:24:14 Nie używaj new bez potrzeby - po prostu napisz BigNumber x( "-22222222222222222222" ); , BigNumber x { "-22222222222222222222" }; lub BigNumber x = "-22222222222222222222"; . |
|
Nitr0Skay Temat założony przez niniejszego użytkownika |
» 2015-11-03 18:33:45 Dzięki za info, Panie Fireho. Jednak chciałbym z ciekawości się dowiedzieć, czy w jakikolwiek sposób jest skopiowanie stylu zapisu z Javy ? |
|
pekfos |
» 2015-11-03 18:52:14 czy w jakikolwiek sposób jest [możliwe?] skopiowanie stylu zapisu z Javy ? |
Te zdanie.. new w C++ i Javie występuje w zupełnie różnych znaczeniach. Da się to zapisać bez gwiazdki, ale to dalej będzie wskaźnik. Nie przeskoczysz różnic między tymi dwoma językami. Trzymając się założeń Javy nie będziesz dobrze programować w C++. |
|
Nitr0Skay Temat założony przez niniejszego użytkownika |
» 2015-11-03 18:54:22 Innymi słowy, sugeruje Pan, abym pisał tą klasę bardziej pod styl C++. Dobrze to interpretuję ? |
|
« 1 » 2 |