Klasy - klasa w klasie

0

Witam,
chciałbym prosić was o mała pomoc w dobrym zrozuieni funkcjonowania klas. Sama klasa rozumiem jak jest zbudowana i jak funkcjonuje jednak problem pojawia sie gdy mam np przypisać wartość zmiennej klasy A do zmiennej w klasie B. Jest to zagadnienie ktore na ostatnich zajeciach programowania miałem doslownie przez kilka minut bo meczylismy inne rzeczy a sam sobie niestety nie moge poradzic.

Otoz tak, prowadzacy pokazal nam na tablicy 2 klasy:

class K {
public:
int x;
float w;
};
class L{
public:
K w;
int x;
char y;
};

Dla pokazania czym jest "class K" zrobil nam tabelke porownawcza do int a : K x (zmienna x typu klasowego). No i okej, wszystko jest jasne.
1 zadanko jakie nam dał to przypisać do zmiennej "w" w klasie K wartosc 2,8 - nie problem -> x.w=2.8
Nastepny przyklad jednak juz jest problemem na podstawie znanych klas dostalismy takie zadanie: x.x=x.w.x+17; i musielismy dojsc co do czego jest tu przypisywane. I tu wlasnie jest moj problem - nie roumiem wartosci po znaku =.
x.x to rozumiem jest zmienna x w klasie K i do niej przypisujemy x.w.x+17 - i co to jest za wartosc? Dobrze rozumiem ze jest to zmienna x z klasy L z tego wzgledu ze zadeklarowana jest zmienna w typu klasowego K ?

Moglby mi ktos jakos w miare prosto wyjasnic na jakiej to zasadzie funkcjonuje bo wiem jak odwolac sie do zmiennej w prostym przykladzie jak ten 1 ale mam juz problem z przykladami jak ten drugi.

0

Sama klasa rozumiem jak jest zbudowana i jak funkcjonuje

To co napisałeś temu przeczy. Lekcja na dziś: KLASA i OBIEKT KLASY to są dwa różne pojęcia!

Poza tym nie bardzo rozumiem gdzie masz problem. Operator kropka powoduje odwołanie sie do pól obiektu typu strukturalnego.
x.w odnosi się do pola w obiektu x, nastepna kropka będzie odnosić sie do pól obiektu w który jest polem x
Ten twój kod mniej zwięźle:

L pole_typu_L = x.w;
x.x = pole_typu_L.x + 17;
0

Problem polega na tym, że nie rozumiem odwołania x.w.x
Jesli np mam przypisac cos do x.w to wiem ze jest to zmienna w w klasie K ale jesli mam cos przypisac do x.w.x to juz mam problem i niewiem do czego sie to odwuluje dlatego chialbym w maire proste wyjasnienie jak rozponac co jest czym w takim wypadku.

0

o_O?
x.w.x oznacza zmienna x która jest polem obiektu (!) w który jest polem obiektu (!) x Gdzie widzisz jakis problem? Jeśli pole w jest intem to możesz zrobić
x.w = 10
A teraz co by się stało gdyby pole w było liczba zespoloną z częścią rzeczywistą i urojoną? Jakoś musisz te dwie części przypisać.
x.w.czesc_rzeczywista = 10
x.w.czesc_urojona = 10

0

Problem widze w tym ze nie rozumiem tego odwolania... oO
Z tego co mowisz "x" nalezy do "x" zawartego w K w i niewiem czy dobrze rozuiem czy nie. Chce prostego wyjasnienia + ewentualnie jakis dodatkowy jasny przyklad - tak, mam na mysli łopatologicznie.

2

Ciezko cos zrozumiec na podstawie nic nie mowiacych literek.

class EngineParameters {
  public: unsigned torque;
}

class Engine {
  public: EngineParamaters parameters;
}

class Car {
  public: Engine engine;
}

Car myCar;
myCar.engine.paramaters.torque = 100;

Obiekt myCar sklada sie z obiektu engine, ktory sklada sie z obiektu parameters, ktory sklada sie z obiektu torque.
Klasa Car jest typem deklarujacym pole typu Engine, ktory deklaruje pole typu EngineParameters, ktory deklaruje pole typu unsigned.

2

Nie rozumiesz ponieważ masz zbyt abstrakcyjne nazwy, ale jeżeli ich zmienić na sensowniejsze:

class Głowa {
public:
int nos;
float mozg;
};

class Człowiek{
public:
Glowa glowa;
int wiek;
char imie;
};

Człowiek Jas;
Jas.glowa.mozg=0;
0

Takie literki dostalismy na zajeciach wiec to nie moja wina. Probuje sie wg tego uczyc bo podobne czeka nas na zaliczeniu w poniedzialek. Jednak powyzszy przyklad niebardzo rozjasnia moj problem. Moglbys to moze jakos porownac do tych klas ktore ja podalem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1