gerbej seb schrieb:
> Hallo zusammen!
>
> ich habe folgende Problem:
>
> ich haben drei Variablen,die ich über die Konsol eingeben und soll die
> in zwei Klassen verwenden; undzwar soll in eine Klasse eine Methode die
> drei Variabele multipliziert und in die zweite Klasse eine Methode ,
> die drei Variable addiert.
> Daher habe ich versucht über Friend-Klassen es zulösen .
Nope.
Das ist nicht der Einsatzzwecke von friend.
Lose es bitte anders.
freind-Klassen benutzt man dann, wenn man eine enge thematische Kopplung
2-er Klassen hat. Zb ein Container und Iteratoren auf diesen Container.
Ein Iterator ist ohne Container sinnlos, gehört als ganz eng zum
Container. Deshalb kann man ihn friend machen, damit er auf die
Internals der Containerklasse Zugriff hat.
Ist wie im richtigen Leben: Nur deinen engsten, allerbesten,
vertrauenswürdigsten Freunden gestattest du Zutritt in dein
Schlafzimmer. Niemandem sonst.
In deinem Fall führt der korrekte Lösungsweg über die Fragestellung: Ist
denn eigentlichg eine Klasse, die für das Multiplizeren 3-er Werte
zuständig ist auch dafür zuständig wo die Werte herkommen? Und die
Antwort darauf lautet: Nein, sie ist es nicht. Das ist nicht ihr Bier.
Solange du keine wirklich enge Kopplung zwischen 2 Klassen benötigst,
ist eine friend Klasse meistens der falsche Weg und ein ziemlich
sicheres Indiz dafür, dass deine Klassenaufbau bzw. die
Aufgabenverteilung deiner Klassen nicht stimmt. Freundschaft ist etwas,
was eine Klasse niemals leichtfertig zugesteht und dann auch nur dann,
wenn es gar nicht anders geht, bzw. wenn man dem Partner, und nur diesem
Partner Zugriff auf Member Variablen geben will, man also die Member
nicht über eine public Schnittstelle zugänglich machen will.
Lies deine 3 Werte in main ein und übergib sie dem jeweiligen Objekt
beim Aufruf der jeweiligen Funktion - dazu brauchst du keine friend
Klassen.
Und so
1 | int B::add(){
|
2 |
|
3 | int sum;
|
4 | A k;
|
5 | sum =k.a+k.b+k.c;
|
6 | // cout<<"sum="<<k.a<<"+"<<k.b<<"+"<<k.c<<"="<<sum<<endl;
|
7 | return sum;
|
8 | }
|
geht das sowieso nicht. Denn das A Objekt in dieser Funktion ist nicht
dasselbe Objekt, das hier
1 | int main()
|
2 | {
|
3 | A Multdata;
|
4 |
|
5 | ...
|
erzeugt wurde. Die beiden Objekte sind vom gleichen Datentyp, sind aber
nicht dasselbe Objekt.
Du erwartest ja auch nicht, dass zwischen einem
1 | void foo()
|
2 | {
|
3 | int u;
|
4 |
|
5 | ...
|
6 | }
|
und
1 | int main()
|
2 | {
|
3 | int Multu;
|
4 |
|
5 | ...
|
irgendwie magisch eine Verbindung besteht. Das sind 2 Variablen, die vom
gleichen Datentyp, nämlich int sind. Und bei dir sind es eben 2 Objekte,
die auch vom gleichen Datentyp, nänmlich class A, sind.