Dziedziczenie, przypisanie wartości.

Dziedziczenie, przypisanie wartości.
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć!
Mam mały problem, który napotkałem przy dziedziczeniu klas.

Kopiuj
class Wektor2D{
protected:
  double Wektor[2];

public:
  Wektor2D();
Kopiuj
class Robot:public Wektor2D{
  Wektor2D Cialo[4];

public:


  Robot();
};

Kopiuj
Robot::Robot(){
  Wektor[0]=0;
  Wektor[1]=0;

  !!!!!!!!!!! Cialo[0][0]=0; !!!!!!!!!!

Stworzyłem klasy ukazane wyżej, jednak mam problem, gdy w konstruktorze klasy Robot chcę zmiennej "Cialo" przypisać wartość. Z tego co wyczytałem muszę dokonać przeciążenie operatora [] dla klasy Wektor2D? Próbowałem je tworzyć jednak nie do końca mi to wychodziło. Czy może ktoś pomóc rozwiązać problem.

KM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 473
0

A czemu tak, a nie std::vector<std::vector<cośtam>>?

  • Rejestracja: dni
  • Ostatnio: dni
0
kmph napisał(a):

A czemu tak, a nie std::vector<std::vector<cośtam>>?

Nie rozumiem za bardzo tego zapisu.

KM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 473
0
NootYet napisał(a):
kmph napisał(a):

A czemu tak, a nie std::vector<std::vector<cośtam>>?

Nie rozumiem za bardzo tego zapisu.

W takim razie, przykro mi, ale poczytaj tutoriale traktujące o kontenerach w C++, zanim zabierzesz się za to, co chcesz zrobić.

Poważnie. Nie możesz wybudować drugiego piętra, póki nie postawisz pierwszego. Jeśli nie rozumiesz podstaw, to nie ma sensu brać się za bardziej zaawansowane rzeczy.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
2

Nie rozumiesz idei dziedziczenia albo zabrałeś się za pisanie własnej aplikacji metodą losowego naciskania klawiszy na klawiaturze, zamiast poczytać poradnik/dokumentację do końca - człowiek jest ręką, czy ma rękę?

Ty twierdzisz (w kodzie), że robot jest wektorem (dziedziczy po nim), a nie że zawiera wektor.

  • Rejestracja: dni
  • Ostatnio: dni
0

Racja nie ma to sensu. Przerobie to jednak, na przyszłość, jak rozwiązać problem z tym przypisaniem?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Zacznijmy od tego, że Twój kod nie ma żadnego sensu, więc nie widzę celu w rozpatrywaniu tej abstrakcyjnej sytuacji - wrzuć coś poprawnego.

  • Rejestracja: dni
  • Ostatnio: dni
0

Zrezygnowałem z dziedziczenia i wygląda to tak. W zadaniu chodzi o to ,że robot będzie wyświetlany w układzie współrzędnych x,y. Jego wygląd będzie przedstawiany za pomocą wektorów 2D. Jeden z nich to środek, natomiast 4 pozostałe odpowiadają za "obudowę" robota. Teraz w konstruktorze robota chciałbym przypisać mu początkowe wektory, jednak trzeba do tego przeciążyć operator, czego nie potrafię zrobić.

Kopiuj
class Wektor2D{
private:
  double Wektor[2];

public:
  Wektor2D();
};
Kopiuj
class Robot{
  Wektor2D Cialo[4];
  Wektor2D Srodek;

public:

  Robot();
};
Kopiuj
Robot::Robot(){
  Cialo[0][0]=0;
}
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Dlaczego trzeba przeciążyć operator?

  • Rejestracja: dni
  • Ostatnio: dni
0

Takie rozwiązanie gdzieś przeczytałem, ale nie jestem tego pewny, dlatego napisałem tutaj, może są jakieś inne metody rozwiązania tego problemu, które możecie przedstawić.

KM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 473
0

Już napisałem: std::vector<std::vector<cośtam>> Ale Ty ani tego nie rozumiesz, ani nie chcesz doczytać, co to w ogóle jest

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1
Kopiuj
class Vector2D {

protected:
	float x, y;
	
public:
	Vector2D(..., ...);
	
	void setX(...);
	void setY(...);
	
	float getX();
	float getY();

}

class Robot {

protected:
	Vector2D bodyPosition;
	
public:
	void something() {
		std::cout << bodyPosition.getX() << ", " << bodyPosition.getY();
	}
	
}

Przeanalizuj sobie taki przykład :)

Oczywiście wzmianka o przeciążeniu nie jest zła, lecz po prostu zbędna na Twoim etapie (to dojdzie później).

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.