Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Z czego wynika konieczność użycia operatora * przy obiekcie ?

Ostatnio zmodyfikowano 2015-11-03 19:35
Autor Wiadomość
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:

C/C++
#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:

C/C++
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ź :)
P-139465
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.
P-139469
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.
P-139470
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:

C/C++
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ć ?
P-139554
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";
.
P-139555
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 ?
P-139558
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++.
P-139563
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ę ?
P-139564
« 1 » 2
  Strona 1 z 2 Następna strona