WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   C++ Anfang (http://www.wcm.at/forum/showthread.php?t=204772)

DCS 28.12.2006 22:17

Zitat:

Original geschrieben von oitt

"Visual C# 2005 - leicht, klar sofort" Markt und Technik.

wer ist der autor ??

oitt 28.12.2006 22:33

sorry...
Walter Saumweber

Biri 31.12.2006 14:33

Zitat:

Eine Variable kann eine Variable sein, oder eine Funktion....hmmm...
ok, ich versuchs wieder mit erklären. :cool:

Also was genau damit gemeint ist, weiß ich nicht, aber ich erkläre mal eine variable.

Stell dir eine Variable wie eine Schachtel vor. In diese Schachtel kannst du etwas hineinlegen. Genauso kann eine Variable einen bestimmten Wert enthalten.

Beispiel: int meinevariable;

Damit wird dem C++ Compiler (der übersetzt den von dir geschriebenen programmcode in machinensprache, sodass ihn der pc versteht) angewiesen, eine Variable zu erzeugen, welche vom Typ "Integer" = Ganzahlt ist. (Man kann in diese Schachtel also nur Ganzhahlen hineinlegen/speichern)

z.B.
meinevariable = 5;

In der Variable mit dem Namen "meinevarialble" wird nun der Wert 5 gespeichet. Du könntest nun z.B. Werte von der Tastatus einlesen:

Programmcode:

string name[50];
cout << "Bitte geben Sie ihren Namen ein":
name << cin;
cout << "Hallo " << name;

gibt am Bildschirm aus "Hallo ...".
Hier wurde die Variable "name" verwendet, um eine benutzereingabe zu speichern. Ich glaube, die syntax ist nicht ganz korrekt (c++ is bei mir schon länger her), das prinzip sollte aber klar sein.

Funktionen fassen mehrere befehle zusammen (einfach gesagt) und ermöglichen wiederverwendbarkeit.

int function berechnung(int a, int b)
{
int c;

a++;
c = a*b;
// irgendwas kompliziertes

return c;
}

void main()
{
int x, y;
x = berechnung(5, 2);
y = berechnung(8, 9);
cout << x;
cout << y;
}

funktionen ermöglichen, abläufe/algorythmen zu kapseln und wiederzuverwenden. Wiederverwendung und modularisierung sind kernpunkte der objektorientierten programmierung.

Funktionen ermöglichen dir auch Funktionalität zu verwenden ohne zu wissen, wie sie implementiert ist. Z.B. die Funktion "cout" oder "printf" gibt text am bildschirm aus. Wie diese Funktion das intern macht, kann dir egal sein - du musst nur wissen, welche parameter sie benätigt und kannst sie aufrufen. Ebenfalls ein wesentliches OOP konzept (Klasse == Blackbox)

fg
hannes

DCS 31.12.2006 15:09

Zitat:

Original geschrieben von Biri


string name[50];
cout << "Bitte geben Sie ihren Namen ein":
name << cin;
cout << "Hallo " << name;


müsste eigentlich

cin >> name;

heissen...ausserdem eigentlich immer ein semikolon, kein doppelpunkt...stimmts ????

argumente sollen doch hinter den anweisungen stehen ? oder ??

Danke für die Erklärung, dann werde ich meinem Hirne sagen, das es funktionen als Subroutinen, die gewisse Aufgaben übernehmen sollen, ansehen soll....

Also das berechnen gewisser Freier Parameter auf festen Optionen...

wie z.b. die Berechnung "wenn wasser bei 100° kocht und ich 50° habe, dann brauche ich noch 50°" und das halt mit wechselnden eingangsvariablen (parameter, argumente, wie auch immer...)

EDIT! AHA, Langsam begreife ich, was man mit Funktionen eigentlich erreichen will !!

Biri 31.12.2006 15:15

ja, hast recht - war syntaktisch falsch von mir.

:-)

fg
hannes

DCS 31.12.2006 15:22

nun, langsam bekomme ich wieder appetit, das wiedermal anzugehen, dieses Konstruktionsmonster C++ zu lernen, wenn einem hier so hilfsbereit mit vernünftigen Worten geholfen wird....

Ich Hoffe, das ich auch bei noch so verhakten Gedankengängen nicht ausgelacht werde, weil ich manchmal die Lösung zwar vor Augen habe, aber sie selbst nicht sehe....


Kann man eigentlich so genannte Funktionen auch am Ende des Quelltextes deklarieren ??

Biri 31.12.2006 17:37

hi,

keine sorge, ich denke der überwiegende teil der leute hier sind sehr hilfsbereit. Meine persönliche Meinung wäre anstelle von C++ eher C# zu lernen (da einfacher), aber wie jeder mag.

Zitat:

Kann man eigentlich so genannte Funktionen auch am Ende des Quelltextes deklarieren
In C++ ist das etwas blöd (was daran liegt, dass zu diesem Zeitpunkt die Compiler einfach noch nicht so fortschrittlich waren) - C# ist hier viel einfacher.

Bevor du eine Funktion aufrufen kannst, muss sie dem Compiler bekannt sein.
Reihenfolge: von oben nach unten.

Beispiel: In der Funktion fu2() möchtest du die Funktion fu1() aufrufen.
Hier gibt es nun 2 möglichkeiten:

1. schlechte/eingeschränkte Möglichkeit
fu1() MUSS vor fu2() definiert werden.
Das ist natürlich blöd und bei mehrere Funktionen, die sich gegenseitig aufrufen garnicht möglich.

2. korrekte/bessere Methode
Deshalb gibt es Headerdateien - also .h Files.
Eine Klasse besteht überlicherweise aus einer .cpp Datei und der zugehörigen .h Datei.

In der .h Datei werden alle Funktionen, die es später in der .cpp Datei geben wird deklariert. Quasi als Anweisung an den Compiler: schau, das sind meine Funktionen.
In der .h Datei stehen nur die Namen der Funktioen mit den Parametern, kein Programmcode.

int fu1(int par1);
int fu2(int par2);

In der zugehörigen .cpp Datei wird diese .h Datei inkludiert.

#include "meineklasse.h"
...ganz am Anfang der .cpp Datei.

Dadurch kenn der Compiler alle Funktionen, die es geben kann/wird.
Aufrufreihenfolge und Reihenfolge, in welcher man die Funktionen mit Code schreibt ist dann (und nur dann!) egal.

int fu1(int par1)
{
// tu was
fu2();

return ...
}

fg + schönes neues Jahr an alle hier im Forum!
hannes

DCS 01.01.2007 05:12

frage ist bloss:

warum wird eine funktion überhaupt ausgelagert??

kikakater 01.01.2007 13:37

Auslagerungszweck compilierter Funktionen: Funktionen werden ausgelagert (in Laufzeitbibliotheken), um diese speicherplatzsparend von mehreren Prozessen benutzen zu können.

Der Code ist dabei einmalig im RAM Speicher des Systems und wird dynamisch an den jeweiligen ausführenden Prozess (Instanz) gebunden und nicht per statischem Binden in jeder Programmdatei eingebunden, die diese Funktionen einer Bibliothek verwendet (Programm_XY_1.exe Programm_XY_2.exe usw)

Auslagerung von Funktionsprototypen:
1) Headerdateien (*.h) beinhalten Funktionsprototypen allgemeiner Funktionen. 2) Spezielle Funktionensprototypen werden gemeinsam mit ihren dazugehörigen Funktionen in Sourcecodedateien integriert (*.c, *.cpp).

Es handelt sich im ersten Fall um API Schnittstellenfunktionsprototypen bzw. Programmfunktionsprototypen (im Regelfall) und im zweiten Fall um programminterne Funktionen und ihre Definitionen (=Prototypen).

Der Prototyp einer Funktion wird vorab vor allen Funktionskörpern und Funktionsaufrufen in einer Sourcecodedatei direkt oder per Verweis auf eine Headerdatei mittels include benötigt, um jeden Parameter eines Aufrufs einer Funktion auf seinen Typ zu prüfen und bei mangelnder Übereinstimmung eine Warnung oder eine Fehlermeldung während der Compilierung auszugeben.

Beispiel:

Code:

/* Prototyp */
unsigned long f1 (int low, int high);

/* Funktionskörper */
unsigned long f1 (int low, int high)
{
 return (unsigned long)low + (unsigned long)high << 16;
}

oder

Code:

/* Typdefinition für vorzeichnlosen 32bit Wert */
typedef unsigned long ul;

/* Prototyp */
ul f1 (int low, int high);

/* Funktionskörper */
ul f1 (int low, int high)
{
 return (ul)low + (ul)high << 16;
}



Alle Zeitangaben in WEZ +2. Es ist jetzt 23:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag