Witam. Wiem że aby utworzyć obiekt klasy wystarczy:
class A;
A myA;
A takie coś nie tworzy obiektu znaczy się tworzy ale jest on Od razu niszczony :
A()
Aby na stercie stworzyć obiekt robi się tak:
A *myA = new A;
OK, ale co dzieje się w takiej sytuacji:
A *myA = new A();
???
Te dwa przykłady ze sterty są w zasadzie tożsame. Ten drugi służy częściej do tego żeby przekazywać argumenty konstruktora jeśli jakieś są.
Ja się na C++ jakoś specjalnie nie znam, ale Wikipedia mówi: http://pl.wikipedia.org/wiki/Konstruktor_%28programowanie_obiektowe%29
MojaKlasa obiektMojejKlasy( 5 );
Wydaje mi się też, że new A i new A() to w zasadzie to samo, ponieważ w obu przypadkach wywołujesz konstruktor domyślny.
TenCoWSzkoleSiedzi napisał(a)
Aby na stercie stworzyć obiekt robi się tak:
A *myA = new A;
OK, ale co dzieje się w takiej sytuacji:
A *myA = new A();
???
marnujesz dwa bajty
Tak wiem,że jeżeli chcę stworzyć obiekt, który otrzymuje jakiś parametr to muszę przekazać do konstruktora parametry, może zobrazuje to trochę jaśniej:
class A
{
A() {x=5}
A(int ax;): x(ax) {}
int x;
}:
int main()
{
A stosA; //tworzy obiekt na stosie wywołując konstruktor A()
A stos2A(5); //tworzy obiekt na stosie wywołując konstruktor A(int)
A stosA(); // co robi???????????????
A(); // tworzy obiekt i zwraca go ale jest on niszczony bo nie został nigdzie przypisany
A(5); // jak wyżej
A *stertaA = new A;//tworzy obiekt na stercie wywołując konstruktor A() i zwraca do niego wskaźnik
A *sterta2A = new A(6);//jak wyżej ale zostaje wywołany konstruktor A(int);
A *sterta2A = new A()// co robi?????????????????????
Shalon mógłbyś to opisać trochę szczegółowiej, chciałbym to zrozumieć :)
A może po porostu skompilujesz i sprawdzisz?
No skompilowałem i
A stosA()
się nie chce skompilować, reszta tak, więc pewnie tak jak było napisane
A myA = new A
AmyA = new A()
wykonują tą samą czynność.
A teraz pomyśl jak wyglądałaby deklaracja funkcji o nazwie stosA która zwraca obiekt A.