Strukturai wskaźnik

Strukturai wskaźnik
0

Witam,
Jestem początkujący i dopiero się uczę i napisałem kod do tego zadania jednak nie jestem pewien czy dobrze to zrobiłem :/

Napisz program definiujący strukturę Punkt zawierającą pola X i Y (współrzędne punktu). Stwórz wskaźnik do tej zmiennej za pomocą operatora new. Wczytaj z klawiatury wartości pól tej zmiennej I przypisz je do niej z użyciem wskaźnika.

#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;

struct Punkt
{
int x;
int y;
Punkt()
{
this->x=x;
this->y=y;
}
};
int main()
{
Punkt *pkt1 = new Punkt();
Punkt pkt2;
cout << "Podaj wspolrzedne: ";
cin >> pkt2.x >> pkt2.y;
cout << "(" << pkt2.x << "." << pkt2.y << ")" << endl;

system("PAUSE");
return 0;

}

szweszwe
Wstawiaj kod w znaczniki!
spartanPAGE
Stwórz wskaźnik do tej zmiennej za pomocą operatora new :DD
KM
Skąd to zadanie, tak z ciekawości?
PR
  • Rejestracja:około 11 lat
  • Ostatnio:8 dni
  • Lokalizacja:Pomorskie (Stare Kabaty)
2

Co według Ciebie to robi?

Kopiuj
 this->x=x;
 this->y=y;

this w większości przypadków jest niepotrzebny, a już na pewno nie w tym. W tym przypadku przypisuje do x i y wartość... x i y która jest niezdefiniowana.
Korzystając z c++11 możesz inicjalizować wartość bezpośrednio w klasie, lub tradycyjnie w konstruktorze/liście inicjalizacyjnej.
Niepotrzebnie tworzysz drugi punkt tylko aby wczytać do niego dane, to też. I na koniec - zapomniałeś o delete pkt1 : )

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:12 dni
3
Kopiuj
struct Punkt
  {
   double x,y;
   Punkt():x(0),y(0) {}
   Punkt(double x,double y):x(x),y(y) {}
  };

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Zobacz pozostałe 5 komentarzy
KM
@_13th_Dragon Jak dla mnie Punkt a(13) to jest pewnie punkt (13, 13)
_13th_Dragon
@kmph, No nie, przy domyślnych parametrach Punkt a(13); tożsame z Punkt a(13,0) np dla liczb zespolonych to ma sens, jak nie podano części wyimaginowanej to jest ona zerowa, zaś dla punktu ...
DibbyDum
@kmph w konstruktorach idzie je jakoś przeżyć ale w pozostałych 90% przypadków wprowadzają nie potrzebne warunki w metodach coś na zasadzie booli, ja jestem zdania że albo dany parametr jest wymagany albo nie. Wole rozbić kod na mniejsze funkcje niż mieć jedną z wartością domyślną. but hey! feel free to disagree.
KM
tożsame z Punkt a(13,0) ja pisałem jak to rozumiem semantycznie, ale takie zachowanie trzeba by oczywiście zaimplementować; może faktycznie overload byłby w tym wypadku lepszy
_13th_Dragon
@kmph, właśnie dla tego dla punktu mam kilka konstruktorów zamiast jednego z domyślnymi parametrami. @DibbyDum, to że pchałeś domyślne parametry bez składu i ładu wszędzie gdzie się da i się nie da nie oznacza że domyślne parametry są złe. Tak samo jak fakt że jakiś debil wsadził palec do gniazdka i już nie żyje wcale nie oznacza że prąd jest zły.
spartanPAGE
  • Rejestracja:około 12 lat
  • Ostatnio:dzień
4
Kopiuj
#include <iostream>
using namespace std;

struct point{
	double x, y;
};

int main() {
	auto p = new point{0, 0};

	cin >> p->x >> p->y;
	cout << "x: " << p->x << ", y: " << p->y << endl;

    delete p;
}
  1. Pamiętaj, żeby zawsze sprzątać po sobie pamięć (lub użyć unique_ptr i mieć na to wyrąbane)
  2. Pamiętaj, żeby nie szykować na siebie pułapek - w momencie, kiedy stosujesz PODy, staraj się zawsze zapewniać domyślne wartości: w tym wypadku wyglądać to powinno tak, jak przedstawił to @_13th_Dragon lub w ten sposób, dostępny wraz z C++11:
Kopiuj
struct point{
	double x = 0, y = 0;
};
edytowany 7x, ostatnio: spartanPAGE
_13th_Dragon
... ale samo point p; nie gwarantuje 0,0 poza tym, czyżby @pingwindyktator jednak cię przekonał? http://4programmers.net/Forum/1223893
spartanPAGE
@_13th_Dragon snippety bez nadmiarowego kodu są ładniejsze ;p
pingwindyktator
Osobiście preferuję taki styl, jak przedstawiony powyżej (C++11). No i ej, @_13th_Dragon, taki zapis powoduje stworzenie przez kompilator faktycznego konstruktora. Wszyscy zadowoleni, nie?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.