Wpis z mikrobloga

@erwit: zrób pole w klasie klient. Niech będzie referencją do kont. Podczas konstrukcji zainicjuj referencję na liście inicjalizacyjnej. Jeśli Ci zależy, żeby obiekt Konta zawierał się w kliencie, to wtedy zrób pole, które będzie tylko obiektem Konta.
@erwit: dżaper @japer chyba bardziej ogarnia niż ja, ale na stackoverflow było coś takiego, i o tym chyba mówiłem :)

It will be initialized by its default constructor. If you want to use a different constructor, you might have something like this:

class Foo

{

public:

Foo(int val) { }

//stuff

};

class Bar

{

public:

Bar() : foo(2) { }

Foo foo;
};
@erwit: jeśli chcę dodać do klasy obiekt innej klasy to muszę zrobić jedną rzecz. Jeśli klasa nie ma konstruktora domyślnego (konstruktor bezparametrowy) to musimy ten obiekt inicjalizować. Robimy to w konstruktorze klasy, gdzie zawiera się obiekt.

Zakładam, że konstruktor klasy Konto przyjmuje dwa argumenty - id i balans a nazwa pola w klasie klient to k.

Klient::Klient() : k("moje id", 666) { jakiś kod... }
@erwit: to coś po dwukropku nazywamy listą inicjalizacyjną. W tym miejscu można ustalić początkową wartość obiektów. Dobrą praktyką jest korzystanie z tego zamiast przypisania. Swoją drogą obiekty stałe można tylko inicjalizować poprzez tą listę, jeżeli masz je w klasie :>.
@erwit: klasa musi zawierać instancję obiektu, albo wskaźnik lub referencję na obiekt. Po prostu zrób bo tak, jak mówiłem - pole, które jest instancją konta i wywołujesz konstruktor w liście.
@KrzaQ2: czy klasy nie musza byc zaprzyjaznione mimo to? Dalem kontonumer w public. W Ausgeben() w Kunde pisze cout<<Konto.Kontonummer i sie nie kompiluje :(
@KrzaQ2: dziala, a wiesz dalczego zamiast 23 (numer konta a) wyswietlilo sie 0 ?(domyslny parametr konsturktora [ bez domyslnyc parametrow w ogole sie nie kompiluje])
@erwit: Bo obiektu

k
w ogóle nie inicjalizujesz. Przyjmujesz w konstruktorze

Kunde
kopię konta (teƶ dla niepoznaki nazwaną

k
), ale nic z nią nie robisz.

...sse, Konto k)


...sse, Konto const& k) : k(k)
Konto const&
to przekazanie obiektu przez (const) referencję, zabieg mający na celu wyłącznie zwiększenie wydajności.

:k(k)
to lista inicjalizacyjna konstruktora. Poniewaƶ nadałeś

k
takie same nazwy to masz zagwozdkę. pierwsze

k
to jest

this->k
- czyli element klasy

Kunde
o nazwie

k
. To

k
jest inicjalizowane (jego konstruktor wywoływany jest) z danymi mu podanymi - czyli w tym przypadku

k
, które w tym kontekście jest argumentem konstruktora (poniewaƶ zmienne lokalne