![]() |
|
Nachrichtenaustauschprinzip - C++Programmierung HTML, CSS, PHP, JAVA, XML etc. |
|
|
![]() |
|
|
Themen-Optionen |
|
|
#1 (permalink) |
|
Nachrichtenaustauschprinzip - C++
Tag zusammen,
habe da mal ne Frage, trotz C++ Kurs an der Uni und einem gewissen Talent was die Sprache betrifft habe ich doch irgendwie eine kleine Denkblokade. Es geht ums Objektorientierte Programmieren. In Klasse A erstelle ich eine Variable, die in einer Funktion einen Wert zugewiesen bekommt. Genau diesen Wert möchte ich jetzt einer Variable in Klasse B zuweisen, weil dort eine Funktion mit diesem Wert weiterarbeiten soll. Mir ist klar, dass ich dafür eine Variable in Klasse B erstellen und diese mittels Funktion zu der Variable in Klasse A referenzieren muss. Nur wie ? Keine meiner Ansätze funktioniert, Google und ein Lehrbuch helfen mir da auch nicht weiter und mein Prof. ist bei aller Genialität manchmal ein etwas chaotischer Didakt ![]() Weiss jemand die genaue Syntax / Codierung ? Gruß
__________________
![]() |
|
|
|
|
|
|
#2 (permalink) |
|
AW: Nachrichtenaustauschprinzip - C++
Ich stelle fest bei C++ ganz schön aus der Übung gekommen zu sein.
Von wo soll denn das Übergeben des Wertes ausgelöst werden? von main(), beim Setzen des Wertes in Klasse A oder durch einen Aufruf in Klasse B? Wolltest Du explizite Klassennamen, Zeiger oder Referenzen nemhen? Arbeitest Du mit Streams? Es gibt dafür viele Wege, welcher der Richtige oder Beste ist, sagt der Sinn der Anwendung. Mal eine spontane Möglichkeit wäre folgendes: Code:
#include <iostream>
using namespace std;
/* Definition der Klasse TheClass und aller Elemente */
class TheClass {
public:
TheClass(); /*Konstruktor*/
~TheClass(); /*Destruktor*/
int GetTheVar() { return theVar; }
void SetTheVar(int tmpVar) { theVar = tmpVar; }
private:
int theVar;
}
/* Funktionen in TheClass */
TheClass::TheClass(){
theVar = 0;
}
TheClass::~TheClass() {}
/*Programm*/
int main(){
TheClass * pClassA = new TheClass; /*Klasse A erzeugen, mit pClassA als Zeiger*/
TheClass * pClassB = new TheClass; /*Klasse B erzeugen, mit pClassB als Zeiger*/
pClassA->SetTheVar(12); /*Wert 12 in Klasse A schreiben*/
pClassB->SetTheVar(pClassA->GetTheVar()); /*In Klasse B den Wert von Klasse A setzen*/
}
__________________
Man reiche mir mein LART! Kein Support bei IT-Fragen via ICQ, Skype, PN oder Email!
(Stammuser ausgenommen) |
|
|
|
|
|
|
#3 (permalink) |
|
AW: Nachrichtenaustauschprinzip - C++
ahoi xai,
erstma schönen Dank. Sieht in die nach richtiger Richtung aus. Es geht explizit um ein einfaches untereinander Austauschen. Das Ganze war eine MFC-Anwendung, also leider in Visual Studio (eig. n gutes Tool, nur halt fürchterlich verkorkst was manche Sachen betrifft. Haben Klassenerzeugen auch nur via VS gelernt. Was uns zwar zu kleinen Göttern im Umgang mit VS macht, die C++ Prinzipien allerdings ein bisschen übergeht, da einem das Programm, gerade was MFC betrifft eine Menge vorwegnimmt, aber das am Rande) Ich hatte als Studienleistung entschieden ein Kniffel zu programmieren und zusätzlich das Ganze mit Transferinhalt zu machen, sprich gescheiter Objektorientierung.So jetzt hatte ich also folgende Klassen: CWürfel; CSpiellogik; CKniffeldlg; jetzt gab es Beispielsweise die Variable int iWuerfelergebnis. Code:
// CWuerfel::Wuerfelergebnis()
{
int i Wuerfelergebnis;
// der Code, wie das Würfelergebnis ermittelt wurde ist mal egal.
iWuerfelergebnis = FullHouse = 25;
}
// Jetzt braucht die Spiellogik das Ergebnis also iWuerfelergebnis,
// damit folgendes gemacht werden kann:
CSpiellogik::Pruefen()
{
if(iWuerfelergebnis == 25)
bFullHouse = true;
}
// Und jetzt wird das Ergebnis an den Dialog geschickt, wo das Ergebnis
// durch Buttonklick in das entsprechende Feld eingetragen werden soll
CKniffeldlg::OnBnClickedButtonFullHouse()
{
CSpiellogik.Pruefen();
if(bFullHouse)
m_edit_fullhouse = 25; // EditControl Valuevariable
m_button_fullhouse.WindowEnabled(false); //Editcontrol Steuervariable
}
![]() Der Code ist stark abstrahiert, aber ich denke, das Prinzip ist klar. Lieben Gruß
__________________
![]() |
|
|
|
|
|
|
#4 (permalink) |
|
Ich bin in C++ nicht so fit. Ist es denn möglich dass du in einer Klasse ein Objekt einer anderen Klasse erstellst und damit arbeitest? Also in Pseudocode sowas wie:
Code:
CSpiellogik::Pruefen()
{
CWuerfel wuerfel = new CWuerfel;
int iWuerfelergebnis = wuerfel.Wuerfelergebnis();
if(iWuerfelergebnis == 25)
bFullHouse = true;
}
__________________
life is great, you just have to look at it from the right perspective
|
|
|
|
|
|
|
#5 (permalink) | |
|
AW: Nachrichtenaustauschprinzip - C++
Zitat:
hatte da mal folgende funktion Code:
CSpiellogik::Logik_nach_Dialog()
{
iWuerfelergebnis = m_wuerfel.iWuerfelergebnis; // m_wuerfel ist die membervariable
bFullHouse = m_wuerfel.bFullHouse; // für die Klasse CWuerfel
usw.
}
also etwas in diese Richtung: Code:
int iWuerfelergebnis, *piWuerfelergebnis; piWuerfelergebnis = &m_wuerfel.iWuerfelergebnis; ![]()
__________________
![]() |
||
|
|
|
|
|
#7 (permalink) |
|
AW: Nachrichtenaustauschprinzip - C++
Ich habe gerade keine meiner alten C++ Codes und kein Buch dabei, daher kann ich leider nicht nachkucken. Aber wenn ich mich recht entsinne wäre die Lösung in der Klasse Würfel das Ergebnis in eine konstante Referenz zu schreiben:
const int& referenz=ergbnis; Wenn ich wieder zuhause bin kann ich nochmal nachkucken wie das genau war. DBP versaut jedes Gefühl für anständige Programmiersprachen. ![]()
__________________
Man reiche mir mein LART! Kein Support bei IT-Fragen via ICQ, Skype, PN oder Email!
(Stammuser ausgenommen) |
|
|
|
|
|
|
#8 (permalink) |
|
AW: Nachrichtenaustauschprinzip - C++
Ich war heute nochmal bei meinem Prof und hab den ein wenig ausgefragt. Ende vom Lied war dann, dass man das Ganze mittels eines "this" Befehls und Referenzen zustande bekommt (keine Ahnung wie das im Code aussieht. Kannte den Befehl bislang noch nicht.) Oder folgendes, und das ist ganz bzw fast wie Xai direkt am Anfang geschrieben hat:
Klasse A generiert den Wert für Variable A. Klasse B möchte den Wert haben und damit weiterarbeiten. ergo: Code:
Class A{
int var, *pvar;
pvar = var;
var = 25;
}
Class B{
int var2;
var2 ->m_A.pvar;
}
Code:
CPen pen, pen2, pen3, *ppen; pen = Create.Pen(PS_SOLID, 4, RGB(255,255,255)); pen2 = Create.Pen(PS_SOLID, 4, RGB(0,0,0)); ppen = pdc->Select.Object(&pen); pdc->LineTo(bla bla); //Der Stift malt weiss ppen = pdc ->Select.Object(&pen2); pdc ->LineTo(bla bla); //Der Stift malt schwarz
__________________
![]() |
|
|
|
|
|
|
#11 (permalink) |
|
AW: Nachrichtenaustauschprinzip - C++
Ok, ich dachte es grad umgekehrt, weil es ja dann erst richtig darauf ankommt, dass man gescheite Interfaces basteln kann. Aber wahrscheinlich geht das auch elegant, ich hab einfach zuwenig Plan von C++.
__________________
life is great, you just have to look at it from the right perspective
|
|
|
|
|
|
|
|
|
#12 (permalink) | |
|
AW: Nachrichtenaustauschprinzip - C++
Zitat:
Hat jetzt weniger mit C++ zu tun, als mit der Objektorientierung an sich. Angenommen du hast ein großes Projekt, welches 500 Klassen besitzt ist Objektorientierung in erster Linie einfach nur übersichtlich. Code, Funktionen, Werte und Variablen zu beispielsweise Fahrphysik wirste dann auch in der entsprechenden Klasse finden und bearbeiten können. Brauchst du einen dieser Werte auch woanders greifst du einfach auf diese Variable von der anderen Klasse aus zu. Und das mit einer Zeile Code. Finde ich nicht sonderlich umständlich ![]()
__________________
![]() |
||
|
|
|
![]() |
| Stichworte | Lesezeichen |
| c++, objektorientiert, programmierung |
| Themen-Optionen | |
|
|