C++ fur Ingenieure: Effizient Programmieren erlernen
 9783834804648 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Harald Nahrstedt

C++ fUr Ingenieure

Grundlagen Maschinenbau

Lehrsystem Technische Mechanik mit lehrbuch, Aufgabensammlung, losungsbuch sowie Formeln und Tabellen von A. Boge und W. Sch lemmer Handbuch Maschinenbau herausgegeben von A. Sage Elektrotechnik fflr Maschinenbauer von R. Busch Technische Berichte von H. Hering und L. Hering

Englisch fUr Maschinenbauer von A. Jayendran Excel+VBA fUr Maschinenbauer von H. Nahr stedt

lehrwerk Roloff/Matek Maschinenelemente von H. Wittel, O. Muhs, D. Jannasch und J. VoBiek Praktische Regelungstechnik von W. Schneide r Werkstoffkunde

von W. WeiBbach

www.viewegteubner.de

----.

Harald Nahrstedt

C++ fur

Ingenieure Effizient Programmieren erlernen Mit 157 Abbildungen und 70 Tabelien

STU DIUM

VIEWEG+ TEUBNER

Bibliogralische Information der Deutschen Nat ionalbibhothek Die Deutsche Nationalbibliothek verzeichnet diese Publikancn in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet fiber abnrtbar.

1. Aullage 2009 Aile Rechte vorbehalten C Vieweg+Teubner I GWV Fachverlage GmbH, Wiesbaden 2009 Lektorat: Thomas Zipsner I rmke Zander Vieweg+Teubner ist Teil der Fachvenagsgruppe Springer Science-Business Media. www.viewegteubner.de Das Werk eeschuesuch aller seiner Iaila lst urheberrechtlich geschctzt. jede Verwer tung auRerhalb der eogen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzuliissig und stralbar. Das gill insbesondere tur Vervielfaltigungen, Obersetzungen, Mikroverfil mungen und die Einspeicherung und Verarbeitung in etekrrcnec nen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt euch chna besondere Kennzeichnung nicht zu der Annahme, dass sclcha Namen im Sinna der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betracbten waren und daher von jedermann benutzt werden ournen. Umschlaggestaltung: Kunkell opka Medienentwicklung, Heidelberg Technische Redaknon: Stefan Kreickenbaum, Wiesbaden Druck und buchbinderische verarbeirung: Krips b.v., Meppel Gedruckt auf siiurefreiem und chlorfrei gebleichtem Papier. Printed in the Netherlands ISBN 978-3-8348-0464-8

v

Vorwort lVaru", dieses Such Die erfofgrciche Hcrausgabc cines Buches fiber Excel und VBA mit dcr Kopp lung von Lchrsroff und Anwcndungs beispiclen aus dcm lngcnicurbcreich und "ide crfrculiche Zuschri llcn waren d..' f MOlor zur IiM d lung dieses lJuc hes. Auc h h i..... soli,," sowohl d cm Ing cn ic urst ud..'Tll...n als auc h dcm praktL.ic...~nden Ingc nseur Wq!c und MOglichkcilC'D der Entwicklu ng eigener Progra mm e ge.. eigt werden. Dabc i gche ich bewussl iiber einfacbe Slrukturen mcju hinaus. Ich halle einfache Programme fUr cine solide na si" eigencr Prop"am menl w id .lung und cinfache Anwendungsbeispie le Iur cine J?Ule Gnmdlage fU r cig ..m e Tests , Ich habe vcrsuch t, auf die elegaraen Tricks in C+-+ LU verzictnen, die sich bei nae nsiver Nutzung und d""01 weneren Stud iurn "on selbst einstejlen. Auf meiner Website werde ich im weitercn Vcrlauf ergsnlmd..- I lilfen und Themen emstenen

Ili/fen

Zur Ers tclhmg do...... Programme babe ich ein EntwickhmgswerkJ'ctlg von Bloodshed Software (hn p·lIwww .bloodshe d.pct)benutzt. Esisl eine Free Software Foundation und ihre Entwicklungsumgebung enthill &'11 GNU Compiler. dL'I" zur freicn Nutzung auch in viclen andcren Emwicklungsumgcbc ngen zu li nden ist . w egen der Scbnctllebigkeit in diesem Bereich verweise ich an dicser Stdle ebenfalls auf meine Website (sjche uetem. in der ich weirere Hinweise einsrellen werdc . Dort lindo.'t dcr Lese r aoch dL'1I Quellte\t &'1" Programme aus diescm Bueh.

Zum ."ul nau Die aufgcfhhrtcn Bcr eiche ems prcchcn der chronologischen Entwicklung de... Progra rnmier ung. Anhand emfachcr Modcllc versuchc ich dL'1I LeS'-'I" flrr C ++;[Ubegcistem, da s durch seine ein fache GestahWlg und kom ple xcn Ml'lg lichleih:Tl bcsticht. Die Kapitel der mod ularen und prozeduralcn Progra mmi crung babe ich kurz gcfusst, III Gunsten mreressan rcr Anwendengsbeispiele. Zum Thema objek toriemiene Programmierung habc ich d;..flrr ctwas mchr ein fhhrendcn Text verwcndct . Ieh hoffc. dass der Leser ausre ichcnd und meuvicn dcm Theme folgcn kann. 1m lctztcn Kapitcl zur gcnc rischcn Prograrnmicrung gcbc ich cincn kurzcn liinblick in zuknnffigc Bctrachnm gen und Anwcndungen. Die eiwclnen Kapitcl bcginnen mil emcm rheorcrischcn Teil zum Thema C ++ und cndcn m etst mit cmcm Anwc ndungs bcispicl. Die A nwL"Tl dunl,~he ispiele greifc n das Them a dann auf und'odcr dicncn als Vorlage zur Umsctz ung des Gelemten. J)l1nksagli nK

Ieh bcdankc mich bci all dcncn im Hause Vicwcg e'Teubncr, die stcts irn llimcrgrund wirkcnd. zum Gc ling-en dicscs Huchcs bcigcuagcn habcn. Ein bc, ondere r Dank gilt meinem Leklor T homas Z ipsner, der mir in lr eulldschlllilichcr Verbunden heit geduldig mil vielen wichligen lind ri\'hligen Kalschlagen half. den Itir den Leser hesten Weg ein/uhalten. Seine Erfahrllngen ai, Chellel tor des Lo:klorals Teehnik waren Hlr rnich sehr hilli"eich. [)lll1 ken mochte ich auBerdem ltllen Kolleginnen und Kollegcn der I' imla seneos Gmhll , Kl'll n. die llir mich cine hcrulliehe !l eima t hcdeutcl. Es isl immer wiedcr cine Frcude in einem Tcam engltgk'l1cr lngenicure an dcr Losllng technisc hcr Problemc lei lzuhabcll_Bci allcm lo rtsehri" lichen Slrehcn slchl hk'f der nL'lle und menso: hliehc Umgang an erstl'f Stelle und iSI damit die Ba, i, des Erlo lgs. An den Leser

Dieses Uuch soll ilueh Lum Dialog zwischen Aulor Wld Leser alilTordern . Daher linden Sic sowohl auf der lIomepage des Vcrla~"S www vjcwegleu hncr,de als auch au f der lI omepage des Aulon www baraldnahrslclll.de c in f orum Hir erglin/ende Programme. Anregt Ulgen. Kezcnsioncn und Kommcnlarc. Mohnesce, f ebruar 2009

lIarald Nabrstcdl

VI

Inhaltsverzeichnis Grun d lag{"n d er Progr ammierung 1.1 Emwickl ung 1.2 Grundstrukturen 1.3 Datentypen, Variable und Konsrame I A Operatoeen und Ausdracke 1.5 Anweisungen 1.6 Fe lder 1.7 Zeiger auf Datentypen 1.8 Zeic be nkeuen

1

J

9 19 31 48 58 67 77

2

Prozed urate Progra mmieru ng 2.1 Der \ Ve-g zu Losung 2.2 Funktionen 2.3 Parameter 2.4 Deklarationen und Gult igkeusbereiche 2.5 Zeiger auf Funktionen 2.6 Callback-Funktion en

87 87 93 106 117 132 141

3

:\Iod ulare Pr earammfcrung 3. 1 :\..todule 3.2 Srrukturen 3.3 Verbu nde 3.4 Zeiger au f Strukturen 3.5 Verken ete Listen 3.6 Dynamische Speicherung

149 149 158 168 178 189 20 1

4 O bjekterten ne r te Pro grammicrung 4 . 1 Der Weg zum Obj ekt 4.2 Objekte und Klassen 4.3 Spez ielle Obj ekte und Met hoden 4.4 Klassenhierarchie lind Vererbung 4 .5 Virtuelle Funktio nen 4.6 Streams 4.7 Ein- und Ausgabe von Strings 4.H Streams und Dareien

212 2 12 220 238 257 272 288 30 1 3 10

5 Gelll'r ischc Pro grammierung 5. 1 Das Grundprinzip

322 322 324 328

5.2 5.3

Punktions-Templates Klassen-Templates

Literaturverz clchni s

.. 331

Sa chwortverzeich nis C++ Thcmcn

.. 333

Sachwe rtverzcichnls Inform ali kffec:hnisch c Th em cn

336

I Gr undlage n der Pro grammierung 1.1 Ent wic k lung Die Darstellun g in Bild I-I zeig t die zeithc he Enrwicklung von C++.

,-

Simula. EitTcI I

C

---'I

....,

,-

l

e mit Klassen

J L "'f , ---'I

-v

'w,

AT&T I--' AT&T C++ ReI. 2 h C++ ReI. 3

Sma ltalk.

,m

C++

J h

,-

J l

,-

'w,

I--' Dr.ofl ---'I ISO 14882 An si h Kcmmitcc Proposal Standa rd

....,

"'f" Algol. Ada Erweiterungcn Bild I -I Die En tstebungsgcschicbte \"011 C++

C++ basien auf C, des in der Zeit urn 1970 in den Forschungslaboralorien von Bell Telephone in den USA entstand . Die Vater von C sind Kernighan und Ritchie, die auch das Standardwerk nber C ..The C Programming Language" verfassten. Gnmdlage war d ie Speache Be Pl, aus der sich erst B und dann C entwickelte. Ehemals fllr Systema ufgabe n geschr ieben. erlengre sic mil dem Betriebssystem UNIX cine gro ue Verbreitung . Bjarne Stroustrup (eben falls Bell Labs) erweit erte die Sprache urn objektori entierte Struktu ren und nannte sie C++. Tools u nd Obj ektc

Gild 1-2 zeigt anschaulich. welche werkzeoge und Daieien am Entsrebungsprozess eines auf der Basis von C++ entwickelten Programms beteiligt sind. Der grau hinterlegte Bereich stelh dabei em Mini mum dar. ru r die Erstelhmg der im Huch dargestellten Progr amme babe ich das Entwicklungs-Werkzeug .,DEV C++" [Blo odshed] benutzr. Es enthalt sowo hl einen Texteditor als auch einen Compiler (GN U) lind Linker. Da sich die Werkzeuge in einem standigen w eu erer uwicktcn gsprozess befinden. ge he ich nicht welter auf' sie ein und verwelse an d ieser Stelle eur meine Web site: www .harald- na hrstcdt. d{' Auf d ieser werde ich d ie jeweiligen Hinweise und Miueilungen der Hersteller und Leser ein-

srenen.

Nachfolgend in Bild 1· 2 und Tabe jte I-I sind die Werkzeuge und Dateien noch einmal beschrieben. Kursiv gesetzte Angaben . in der nachfolgenden Tabelle ebenso wie irn ganzen

2

I Grundlagen der Programrmerung

Buch, sind Platzhalter und besc hreiben di e eige nnic hen Angaben. In eckigen Klammem gesetzte Obj ekte kcnnen auch entfallen. Editor

n

Proj ckJ 1 Qucllcode-

Header-

Dillc i(clJ )

Dillc i(c u)

-'=j~

I

JC

J

I

Other Moduls O bjekl-

r

I II t- '--==J

Ileader-

D \.I Ang .. iff spu n kt (x) = 0 Angr iff spu n kt = t Ang .. i ff s punkt ( z ) • 8 K.."ftko,"po nente (y) I' K.... ftko .. po n ent e (2) sun}! kubischcr Gkichungcn

Kubische Gleich ung

Xl

+ ax l + bx + c = 0

"3

p =b - -

q=-227·a---3-H 1

a -b

[y = >+ ~J Diskriminate 0 =

(~r + (

*r

D::Ol u:: pow ( z, f l ; e l se u'" -pow ( (- z l , f l o z '" - (ql2l-s ; i f ( z >"'OI v '" pow (z, t l ; else v "' - (( - z l , f l ; yl = u +v ; y2 '" - (u +v l l2 ; y2i '" sqrt ( 3 1+ (u -v ) /2 ; y 3 :: - (u +v ) / 2 ; y 3 i = -sqrt (3 ) * (u- v I /2; xl y l - a l3 ; x2 = y2-a l3; x3 :: y 3 -a /3 ; cou t « ~ x l :: « xl « cou t « -xz :: « x2 « « x3 « cou t « ~x3 '"

endl ; +

i~

«

• + i · «

y2i « y 3i «

e nd l ; endl;

II Stop s yst em (. Pa us e ~ I ;

~ i t Hilfe des ersretne n Progra mms lassr sich das nacbfolgende Berecbnungsprobte rn ldsen. Ein Blechtrichter nacb Bild 1-13 hat die Querschnittsform eines gleichseuigen Dreiecks und em Volu men von 1814 cm1. Gesuc hr ist der obere Durchmesser des Kegels. denn bier soli em zylindri sches Rohr angeschweiut werden.

,

.

Kild 1· 13 Gcschwcibrcr Blcchtrichtcr

Das Volumen bestimmt sich aus der Pormel V=

; ·(~r ·h.

Da der Quers chnin ein gleichseitiges Dreieck iS1. Iolgt rUT die Hohe

( 1.21)

30

1 Grundlagen der Prog ramm ien mg

(1.22)

Damit ergibt sic h d ie kubisch e Gleicb ung

d l _ 24 '~ =O =dJ _ 8000

( 1.23)

Jr · ,, 3

Mit lI ilfe des Pro gramms ergibr sich cine reeue Losung. DeTDurcbrne sser isl 20 em groB .

Ceben S i!! di e faktoren "in " " r Gle ic hun g : ,, ~ 3 • " " A2 • h " • c _ 8

••.....

•b

-

o

Di l! Lo e sung der Gle i chung " AJ • 9 " A2 • H " • - 8800 l ~

gro8er g leich




groBer

Beispie le: Anwend ung von Vergleichsope ratoren

(23 == 45 1

(7. 55 < 8 .22 ) ( ' a ' < 'B' ) ( 3 > 3)

II II II II

lie fert f a l s e

lie fe rt t rue

lie fe rt f a l s e lie fert fa l s e

Logische Ausdrtlcke kennen mit nach folgenden logischen Opereroren kombmi ert werden : Ta helle 1-'-' Logischc Opcrarcren

Operator

Bedeutung

&& II

logisch UN D

!

Nega tion

logisch DD ER

Diese liefern die aus der Boolesch en Algebra be kannten Wahrh eitstabellen . Beis piele: Anwendung logisch er Operaroren

o < Hoehe && Ho e h e < MAX_HO EHE a:bll c :b Kr af t

!:

NULL

Op erat or slzeof Mit dem Operator sizeo f karin der Speicherbede rr von Variablen und Daten typen bes um mr werden.

1.4 Operatoren und Ausdracke

33

Syntax : A ufruf als unarer Operator oder als Funktion s i zeo f Au s d r u c k si zeo f (Aus d r uckl

// u n a r e r Ope r a to r // Fun k t i o n s a u f ru f

Darin ist Ausdruck in ein fachsten Fall eine Variable. Fur den Funktionsaufruf ist a ls Ausdruck auc h ein Datenlyp erlaubr. Das nachfolg ende Programm erminet t den Speicherbedarf des benutzten Sys tems. COOl:' 1-7

An\\l:ndun~sbe i spic l

- Besiimmcn g des Spe jcherbedarfs eimger Datem ypc n

/ * Speicherbedar f.cpp

.,

Das Progr amm z e i gt den Speich e r bedar f v e rsch iedener Oa tentypen

'inclu d e O und f(x2) 0

J,

Nein

xj v x

x2 = X

So lange wie :r

c

Ausgabe x Nun ersetzen wir die allg emeinen Bedingungen und Formel n durch die speziellen unseres Beispiel» und erhalten so einen A lgorit hmus. wie in Tabetle 1-21 derge stellt.

42

1 Grundlagen der Programmien mg

"1IIb('lIe 1-21 Bcsrimmung dcr minimalcn Dbcrflacbc

Eingabe

Bestimmung zweier Srartwerte dj und d1. so dass O'(d j) > 0 und O '(d!) < O. Abschaltwert der lterationsschleife c

d=d-O'(d) I

I

d, - d, O'(d 1) -O'(d l ) 1st O'( d) > 0 Nein

J' d] = d

dj

e

d

So lange wie ]f( 'l ~ > c Bestimm e O "(d)

Ausgabe d und Angabe ob Minimum oder Maximum C OO t 1-9 Anwendu ngsbcispicl -. Minimalc Oberfl ache 1* Mi nOberf l a e c he . cpp

.,

Das Pr og r amm bestimmt d i e minima Ie ei nes zy l i nd r i s c he n Beh~l te rs be i v orge ge benem Voh une n

Ober f l ~c he

' inc l ud e 'inc l ude cons t doub l e p i : 4 *ata n ll l ;

/ / Kon s t a n t e p i

II Rad i u s in em dou ble Rad (doub l e d} {

r e t urn d/2;

II Ober fl~c he i n cm~ 2 doub le Ob( do ub l e V, doubl e d} (

II 1 . Ableitung der Ober f l ac he double Ob ll doub l e V, d ouble d ) (

return 4 *p i *Rad (d ) -2 *V/ (Rad ld ) *Rad ld l ) ;

43

1.4 Operatoren und Ausdracke

II 2 . Ableitung der Ober f l a e h e d ouble Ob 2( doub l e V, d ouble d ) (

r e t urn 4* p i+4* V/ 1Ra d (d l*Rad (d )*Rad (d ) ) ; i n t me Ln (I d ouble V, dl , d2 , d, e; d ouble 0 1 , 0 2;

bool H;

eou t « endl « c i n » V, c out « e ndl « cin » dl; cou t « e ndl « c i n » 02 · cou t « endl « ci n » c o ut « e ndl «

..

" Vol ume n lc cml V ·St a r t we r t

[= l d1



o .

· St a r t we r t

{=I 02



o .

" Absch a l t g r e n z e

{

i f (02)::0 1 {

f al s e ;

l

else {

i f (0 2 ) ::0 ) (

d :: dl ; dl d2 ; d2 :: d ; )

e lse {

M

. .,

· d \ t \ tO \ t \ t O' \ t \ tO · • • «

II Star tObe rp rU fung H :: true ; 0 1 :: Ob I (V, dll ; 0 2 :: Ob I (V, d2 1 ; i f (0 1 ) ::0 1

M ::

. ·,

fa l se ;

J

if {M::::t r u el {

II Bere c hnung do (

d :: dl- ol * (d2 -dl l / (02-0 1 ) ; i f tcer :v . d l> Ol dl :: d ; e l se d2 :: d ,

e n dl ;

44

1 Grundlagen der Programmien mg cou t « c out «

d « " ' t \ t " « Ob(V, d ) « - \ t \ t " ; a b l( v. d ) « "' t \t « Ob le v , d ) « N

e ndl ;

}

1/ Abbruchkriterium while ( f a bs(Ob l( V, d l l > e ); cou t « d « "\ t\ t" « Ob lV, d ) « " ' t \t " ; c out « Ob l(V . d ) « "\ t\ e" « Ob 2( V, d l «

endl ;

}

el se cou t «

·S t a r t we r t e f a l s ch ! " «

e ndl ;

Das Programm bestimmt einen optimale n Durcbm esser mit 3.99313 em. I) ol .. _n

I ~ :>

c;

II Aus wertung un d AU$911.be s = 11I. +b +c) /2;

,

i f la:> a ; cou t « "Ho ehe " " , c In » bi Vo l=a "a "3. 1 4159 / 4 *b; cou t « ·Volumen " • «

=

break ;

0

,

Vol;

c a s e 'R ' : ' " Rechteckplatte * f c out « "Laenge ", cln » a ; cou t « " Br el t e e l n » b, eou t « " Hoe h e " cin » c ; Vol =a *b *c; cou t « "Volume n "« Vol; b reak; de fa u l t: So ns t cou t « "Fal s che Eingabe!";

= ",

'*

*'

s ys tem (" Pa use" );

Die hrea k-Anweisung verbinden die AusfU hrung nacbfolgender Anweisungen und kann auch er ufallen. Ebenso die dtt cl/llt-A nweisung. Erganzen Sie die Funktion.

1.5 Anweisungen

51

It er ation mit fest er AII,I~ahl " on Wi ed crholungen lteran cnen sind wiederhc fungen von Anweisungen in Abhangig keit von logischen Ausd riicken. hier els Bedmgungen bezeic hne r. Solange die Bedingu ng den Wahrhe itswer1 true besitzt. werde n d ie Anweisungen wiederholt ausgefbhrt.

Die jce-Anweisung ist eine Iteration mit einer Iesren Anza hl von Wied erholu ngen . oft aueh als Schleife n bezeichner. Die Laufvaria ble begin nt mit einem Startwert und wird dann urn eine Schrittweite so lange verandert. bis eine Bedin gun g erreicht ist. T .bl"lIl" 1-26 Iteration mil Ieststcbcnde r Anza hl Wiederbolungen

for {Laufvariablev Startwert; Bedingung; Schrittweite)

I

Anweisu nge n

Sy ntax : Iteration f or

( Lau f va r i a b l e : Startwert ; Bedingung; S chrittweite )

{

Anwei sungen ;

Auch bier kennen bei einer Anweisung die Separa toren ent fatlen. ClIdl' 1-13 Anwcrnl ungshcispicl - Numerische Integration: Das besummte Integral als Fllicht.'fIinhalt /.

Ite rati o n_F I~ cheninhalt .cpp

bestimmte In t egr al als Fl ~cheninhalt: Die Fu nktio n bestimmt den Fl a c h e n i nha l t in n Sch r i t t e n zwis c he n der Pa r a bel y: f (x ):x ' x und de r x-Achse im In t e r vall l 0)

64

1 Grundlagen der Programmie rung

C oM 1·19 Anwcndangsbeispicl - Einschrittigc Codes nach dcr Backtracking-Mcrhodc 1* Eins chrittige_Codes. cpp

./

Dieses Programm s uch t alle mOglichen ein s chrittigen Code s nach d e r Backtracking-Methode

.include

'include int main II { II Deklarat i o nen lnt A1l 6] [4 ]. U [4 J . M[1 6 J ; lnt i . j. k . 1 . n ; i nt pL p2 ; l nt v . a , s; II S t a r t

cou t « "Anzah l d e r Code s bis zum Stop: c in » z ; cou t « - Bi t t e haben s i e etwas Geduld ! -

~.

«

e nd l;

y :: 1;

II Ausgangskonfiquration 0000

f or (j= 1;j1

den lnhalt des

A" wendungsbdspiel: widerst ands-Farbcodc Urn das Arbe iten mil Zeichenkenen zu verdeu rlichen. ben utzen wir ein Anwendungsbeispiel aus der Elektrotechnik . Der Wert emes Widerstandes lasse sich an se iner Farbgebung ebles en.

I . Ring 2. Ring 3. Ring 4. Ring

8 ild 1-_\1I Farbkcnnu ng emcs elektrisc hen Widcrstands Tabt'lIt' 1-34 Wido.:notands -Farbcodc

Furbc

Schwar z

0

2. Ring 2. Z iITer

0

3. Ring Zahl dc r Na llen

4. Rin g Tclcra nz

0

I

Bra un

I

I

I

Rill

2

2

2

Orange

3

3

3

Gd b

4

GrOn

s

,

,

Hlau

6

6

6

4

4

Viol ell

J

J

J

Grau

s

s

s

wein

9

9

9

Gold

-

Silber Dbne CtJd~ 1 - 2 ~

1. Ring 1. ZitTer

Die Funktion bestimmt den Farbco d e

2

0,5

-

-

-

XO.I

,

X O.QI

10

Anwcndungsbeispiel -. Farbcode \'011 widcrsr anden

I '" FarbCode . c p p

in %

20

1.8

81

Z~i c hen kelll:n

>/

e i nes Wi d e rs t a n dwe r t e s ve re i n f ach t o h n e To ler anzangabe

' i n c l ud e < ios t r e am. h> ' in clu d e II Deklara tio nen d er St r i n 9 - Funk t ion e n main () (

c h a r Ohm ( 1 J, COde; i nt i: O, Max , Null en: O; cou t « "Wide rs t a ndswe r t c i n » Ohm;

[Ohm] :

-.

Max : strlen (Ohm) ; cout « '\n' « ·Wi d e rs t a n d s f a r ben : f or ( i=O; i II De kl a r a t i o n e n d e r St r i ng - Fu n k t ion e n

main (J {

i nt i , j, x , Lo esun g e n , Kr iterien ; II L5 sungen cou t « - Anz a h l Loesungen c i n » Loesunge n; s td;;s t ri ng Lo e sung [Lo esun g e n]; c o u t « *Besch re i ben Si e d ie Loes ung e n : \ n * ;

= .;

83

1.8 Zeichenketten f o r (i=O, i

int x s Il g l o ba l int main II

1

e xter n i n t fl int yl; x: 9 ; cou t « x =9 ; cout -c

«

endl ;

(f( x} * f( 9ll -c

endl;

( f( 9) *!( x»

s ys tem ( " Pa us e ") ;

int f lint 1

y'

x - =9; r e t u r n y*y +l ;

Dieses Beispielliefert die Ausgabe :

I"

6 72 4

2.3 Parameter

107

Parameter lassen sic h in C++ per value, per pointer Oller pe r reference an Punkno nen ube rgeben. Die Entscheidung. wie ein Parame ter ube rgebe n wird. wird flir j eden einzel nen in der Para mererh ste geiro ffen: Die (Jbergabe als Wert dutch die Nennu ng der Variablen. die Dbergabe als Zeiger dureh den Adr essoperator zur Varia blen od er die Ube rgabe els Reterenz durch de n Referenzoperator zur Variablen.

Ca ll b)' va lue Wird ei n Funktion sparameter als w ert tper value) an eme Funktion ubetgeben. dan n wird eme Kopie der Variab len im Speicher (Slack) engelegt. Innerhal b der Fun ktio n kann der Inhalt der Kopie beliebig veranden werden. Der Programm ierer kann sicher sein. da ss mil Been digung der Funknon der Inhah des Origi nals nicht veran den wur de. COOt 2-& v ertauschung dcr Inhalte zweier inl-Variablen minds coli by }'(llue 1* c a l l ByVa l ue . cpp

0'

'inclu de vo i d swap (int a ,int b ) (

i nt trnp=a ; a=b; b =trnp; i nt mai nl) (

i n t a =l ; int b =9 ; swa pla, b); cout « " a: cout « " b :

« «

a « b «

endl ; e nd l ;

s ystem( "Pause");

Das Progmmm liefer!: [ b"': 19

Die Werle werde n also mcht vertausc ht. Das liegt da ran. dass mil dem Aufruf der Funktion s wap die Werte der v artable n in entsprechend lokale Var iable der Fun ktion kopiert werden. Die Vertausc hung finder nur unter den lokale n Variab len der Punkno n stan. Beim verjessen d er Funktion werden die lokalen Variab len 3 . b und tmp verworfen.

C all by pointer Das im vo rherigen r ail durchaus gewn nscbre Verhalten fllhrt dan n zu Problemen. wenn die Vertau schung auch fiir die rufende Funkt ion gelten 5011. denn die ge rufene Funktion ka nn

10K

2 Prozedurale Progrummierung

hochstens nur einen Ruckgabewert (mind s return) liefem. Die typische Losung ist. dass r ncht die werte an sich, sondem nur deren Adressen an die Funktion abergeben werden. COO t" 2 -~ v ertauschung dc r Inhalte zweicr im-Variablen minds call h)·pointer

, - Ca l l By Po i n t e r . cpp

0'

' inc l u d e v oid s wa pl i n t -a,int Ob I {

int tmp =-a; · a =· b ; - b =tmp ; I ,

int main () int a =l; int b =9 ; s wa p! &a , &bl; « cou t « "4 : cou t « "b: ° «

I,



«

b «

endl ; endl ;

s ys t em!" Pause - I ;

Das Prcgr arnrn liefert nun auch das gewu nschte Ergebnis:

Ca ll by refer ence C++ kennr noeh erne weitere Form der Paramererabergabe . die Ilbe rgabe per reference. Dies wird dadurch gekennzeichnet. dass dem Funktionsparameter em & vorangestellt wird. In diesem Zusammenhang ist der Operator nicht mil dem Adressoperator & zu verwechse!n. Das Testbelsplel bekommt dadurch die nachstehende Form. CUdl' 2-6 Vcrtuuschung dcr lnhaltc zwc icr int-vanablcn mmcls call hy ref erence

, - Ca l l By Re f e r e n c e . c p p

0'

' i n c l u d e v oid s wa p( i n t 'a.int 'b l {

I,

int tmp =4 ; a=b ; b:tmp ;

2.3 Parameter

109

int main () {

int a =l; int b =9 ; SW

Ein verdeckt g lobaler Name kann durch den Bereichsoperaror (::) sichtbar gemacbt werden. C ode 2-11 Dcmoprogramm - \·erded..1 gjobale Variabl e

I '" Ve rdee:k.tGlobal.epp Ve rdec:k.t qlobale Variable

0'

' i nc l u de i nt x :: 9;

q l obal es x

II

void f lJ (

i nt x::l; Il lo:k.a l e s x c ou t « · x . L : • « X :: x : 2 ; II Zuwe i s un q x= 3 ; II Zuwe i s ung cou t « "x . L :: " « x

verdec:k.t g loba l es x « endl ; an globales x an l okales x « endl ;

int mai n () f (J ;

int * p :: &x ; Ii n i mmt d i e Adres s e des globa len x cou t « "p :: " « *p « e nd l; s ys tem( "Pause " ) ;

x. L x _U

x. L x. L p

~

~ ~

~ ~

9

1 2 1

3

DrUc ken S ie ei ne be l iebige Ta s t e

_

BUd 2-17 Progranunausga be - vcrdcc kt glo balc Va riable

Es ist auch moglich. mit einem einzigen Namen ohne Benutzung des Bereicbs-Operetors (::) zwei verschiedene Obiekte in einem Block anzusprechen.

120

2 Prozedurale Progrummierung

CoM 2-12 vcrsc hicdcnc Objcktc 1* Ve rsch i e de ne .cpp

.,

Vers chiedene Ob j e k t e

' i nclude i ntx =9 ;

globales x:

II

v oid f II {

int y =x ; ttbenu t z t globales x : y=9 cou t « · y. L :: • « X « e n d l ; x=22 ; II Zuwe i s ung an l ok a l e s x y=x; l l benu t z t l okales x : y =22 « x « endl ; c out « · x. L " c out -c · y. L =' • « x « endl ;

int maoin (J (

f n ;

int * p

cou t «

= &>0: ; Il nimmt .p = • « *p

d ie Adre s se des globalen x «

endl ;

s y s t em(· Pau se " ) ;

y. L

x. L y. L p

-

~ ~

~

22

9

22 22

DrUc ke n S 1O' e r ne bel u ,hlg e Ta " t e • • •

Bild 2- IM Pr ogrammausgabe - verschicdcne Dbjck re

xamcusruumc Ein Namensraum (en gl. namespace) is! ein Gttltigkeitsbereich. in dem belie bige Objekte w ie Variablen , Funktionen und andere Strukturen deklarien werden konnen. Aile Bibliorheken der Standard Temp late Librar y (ST L) sind zum Name nsraum s td zusammengefass t und werden dur ch die using-Anweisung Syntax : Definition des Standard-Namensraums

I using

n arne s p a c e s t d;

deklariert, wie berelts in ein igen Beispiele n gezeigt . Ein Namensraum kan n deklari en werden und Obj ekte in ihm werden durch den Bereich s-Operator (::) angesproc hen. Der HereichsOperator wird auch als Sco pe-Ope rator bezeichnet.

2.4 Deklararionen und Gultigkeirsberelche

121

Cod l.' 2-13 Dcmoprogra mm - Narncnsranmc 1* Namensraeume . c pp Zeigt die Wirkung v on Namens r aumen "/

' i n clu d e < ios t r e am. h > II Deklaration v on Namens r aum A namespace A

1

int i = S ; int f l i n t x ) {r e t u r n 2 *x+l ; }

II Deklaratio n v on Namensraum 8 namespace 8

1

=

i nt i 6; i nt f lint x l {r e t u r n 2 *x ;}

i n t main 11 (

cou t c out c o ut c out

« « « «

"Der "Der "Der "Der

We r t We r t We r t We r t

v on v on v on v on

i i f f

in in lJ ) (4 )

A, B,

« «

A; 8; « in A, in B, " « " "

;i « ;i « A;; f B;; f

endl ; endl; ( 3 ) « endl ; (4 ) « endl ;

system l " Pause " ) ;

De r Ue t"t vQn 1 in A : 5 Der Ue t"t v on 1 in B: (, Der Wert VQ n f (l ) In A: 7 De r Wet"t VQ n f (4 ) In B: 8 Drll(: ke n S l e e l ne beliebig e La s t e

WId 2-19 Programmausgabc - Narncnsranmc

Namensrnume kormen auch gesc hachtelt deklarien werden. Co de 2-14 Dcmoprogramm -, gcschachtelrc Nnmcnsraumc 1* Geschachtel t.cpp Gesc hac htelte Narnen sr~ume "/

' i n c l ud e < i o s t r e am . h > IIDek l a r a t i o n de r Namensra e ume namespace A {

• __

122

2 Prozedurale Progrummierung

.

int i

5,

narnespa ce B (i n t

int mai n

1

i ot cou t cou t cou t

i

()

« « «

i • 6;)

,,

" De r We r t von i i n rnai n : " De r We :r- t von « i n A' " De r We r t von i i n B, «

,

system l ·Pause ~ l

.

«

i «

A : :i « A : : 8:: i

endl ; endl ; « endl ;

;

Der Wer t von). J.O _in ; 4 De r \Je r t v on i i n A: 5 Der Wert v on ). J.O B: 6 Drlicken Sle e i ne bel i ebige Ta st e . . •

Hild 2-20 Pregranjmausgabe - gescbachtche Narrensrsume

Die S peichc r"k la ~ ~c a utomat ic Fur lokale Variab le und Funktionsargu mente wild auto matisch Speic herplatz reservien . :\.til jedem Emsneg in cine Funktion od er einen Block l I be ko mmen d iese eigene Kop ien. Will ma n diesen Sac hverhalt ex plixit angebe n. so gibt es dazu das (liberOussige) Schlassetwo n QI/ t o . Beispiel:

II Fo l g e nde Deklarationen haben die gleiche Bedeutung i ot i " 5 ; au t o i n t i = 5;

Aullerhalb ihres Bloc ks sind automatic vereinbarte Variable unsic htbar. Cude 2-1!' Dcmoprogmmm -cautoma tic vcreinbartc Variable

; * Au t omat i c. cpp Au t omat i c vereinbar te Va r i a b le "/

' i nc l ude int main () auto int i = 4 ;

1

int i = 5 ; c out « "Der We r t v on i : " «

c out «

"Der We r t von i: " «

s ys t em!" Pa u s e - ) ;

i «

i «

endl ;

endl;

2.4 Deklararion en und Gultigkeirsbe relche

123

Der Wert von 1: 5 Der Wert von i: 4 Dru l:ken S le e In e be liebig e La s t e

lIild 2-21 Ptogrammausgabe -

O//I,m/ot ic

_

vcrembarte Variable

Die Speic hcrklauc §Ialic 1m Gegensarz zu r Speic berkjasse automatic behalt eme stausche Variable ihren Wert so lange. h is sie eine neue Wenzu.....eisu ng erhalt. Wird eine statische Var iable am Anfang nut definiert und nic ht de klariert. so erh.lilt sic vom Comp iler automausc b des Nullelement des Datent yps. Codt' 2-16 Demopeogramm - slatk' verembane Variable

' " Static . cpp St a t ic vereinbarte Var iable

.,

' include int mai n ( I i nt Swrrne( int. x t . f or lint i=1 ; i 'x

(2.24)

ersetzt. \Vlihlt man tJ.x genugend klein. komm t man der analytischen Losung beliebi g nahe . Der Nachteil w ird aus der Darst ellung eben falls recht deuthch. :\-1il zunebmende n Schritten enue m r sich die numerische Lc sung immer mehr von de r anal ytisc hen. Ein genaueres Verfahren ist z. B. das Runge-Ku lta-Verfahren . Die Betrachtun g des Kra flegleichgewichts an beweglichen Massenpunkten fiihrt unmit telb ar zu einer Differenualgleic hung . Db d ie-s nun ein fache Bewegungsmo delle wie z. B. Rotationen sind ode r komplexere Modell e wie r , B. Scbw ingungssysteme . Der Ande-rung des Bewegungszustandes serzt der Massenp unkt seine trage Masse entgegen

f = -m · a .

(2.25)

Die momentane Beschle unigung a ergibt sich als Differenrialquouent

f1 = dv =v' . dt

(2.26)

so dass di e ersre Anwendung des Euler-Cauc hy-Ve rfahrens die wahren d tier Zeiteinheit dt au flretende Ge scbwindigkeitsande rung dv liefert

F

\' = - - t.

(2.27)

In

Fur d ie momeruane Gesc hwmdig ken gi lt weiterhin der Differentialquotient

v = ds = s ' dt

(2 .28)

2.5 Zeiger auf Funktionen

135

so dass die zweite Anwendung des Euler-Cauchy-Verfahrens den wahrend der Zeiteinheit dl zurnckgelegren Weg ds annahernd beschreibt

s = v · t.

(2.29)

Die rnomenrane Geschwind igkeit wird dabei aus Einfachheitsgnlnden rur die Berechnung durch die Anfangsgescbwindigkeit des berrachteten Zeitmtervafls ersetzt. Als kc nkretes Beispiel soli nachfolgend eine mecbanische Schwingung dienen. Umer einer mechanischen Schwmgung versret n man die periodtsche Bewegung emer Masse um eme Miltellage. Den einfachsten Fall bildet ejn Feder-Masse-System. Bei der Bewegung finder ein standiger beergieeusrauscb zwischen potentieller und kinetischer Energie stan. Die potentielle Energiedifferenx wird auch a ls Federenergie bezeic hnet. Die bei der Bewegung umgesetzte Wermeenergie dUTCh innere Reibcng in der Feder soli unberacksicbugt bleiben. wirken auf ein schwingendes System keine li.uBeren Krafte, bezeichnet man den Bewegungsvorgang als freie Scbwingung. andemfa lls als erzwungene Schwingung.

Hi1d 2-29 Freic gedamp ttc Scbwing ung

Die bei der reaten Schwingung stets auftretende widersr endskratt. Bewegung im Medium und Reibungskrafl (Stoke s' sche Reibung, im Gegensatz zur Coulom b' schen oder Newton' schen Reibung), etc.. soil in erster Naherung als geschwindigkeitsproportional angesehen werden. Bei der Betrachtung einer freien gednmpften Schwingung wirkt zum Zeitpunkt I an der Masse die Federkrafl (2.30)

mit der Federkonstante f. Ftlr die Dampfungskraft folgt unter Einfubrung der Dampfungskonstante n dai s MaB flir d ie Damp fungsintensnar r~

= 2 · m· d ·s

(2.31)

Nach dem d 'Alembertschen Prinxip folgt

m -s = - f ' 5- 2' m -d -s .

(2.32)

13.

2 Prozedurale Programmierung

Umgestellt dv r - = - - s - 2 ·d · \l dl

12.33)

m

Nach dem Euler -Cauchy-Verfabren ersetzt man den in d er G leichu ng (2.33 ) entbanenen Different ialq uoti enten durch einen Di lTerenzenq uotienten .6. v

- { ~ !> + 2dVrl .

(2.34)

fill hinreichend kle ine Differenzen III be kornrnr man so eine engenaherte Losu ng 6 \'. Ta bl"ile 2-9 SlnJL.logra mm - Simulation einer freien gedampfte n Scbwingung

Emgabe m, f d. SO. Vo. I(). dt •

~

Solange I < t.:

!iv-, = { .!..s m ' + -"dv. -1

}t.

v. = v._1 +.6.v,

.

as, = v . · J-I 5 , = S;_I

+& ,

t , = 1._1 + 6.t

A usg abe s.. Vi. Ii Cod e 2-20 Anwc ndungsbcispicl Dctermin istische Simulation - Freic gcdampftc Schwingung

'* Das Freie Schwi ngung . cpp Pr og r amm s i mu l i e r t

den Bewe gu ng s verla u f e iner freie n ged~ f t en Sc hwi ngung

"/

. i nc l ude u s i ng narne s pace s t d ; int mai n () 1

dou b l e m, f. d, d ouble s. v, t , d t , d s , dv , t e;

FI LE *p uff e r ; p uf f er = f op e n ( "C : \ \ Temp \ \ Schwingun g . d at - , - w- ) ;

II Eingaben c ou t « "Masse m [kg ) = "; c i n » m; c ou t « "Fe de r ko n s t a n t e f [ kg / s"2j cin » f ;

.;

2.5 Zeig er auf Funktionen c o ut « cin » cou t « cin » c o ut « cin » cou t « cin » cou t « c in » cou t « cin »

137

= ";

"D~pfung skonstante d il ls ) d; "Aus ga n gspos i t ion s O [m) = "; s, "Aus g a n gsg eschwi n d i g k e i t v O [m/ sl v; "Aus g a n gs z e i t t [51 t ; "Sc h r i.t t we i.t e dt LeJ .; dt ; " End ze i t te I s) te;

=~;

= .;

= •.

II Analyse do 1 d v = -( f / m-s+2 - d - v) - d t; v = v+dv ; d s = v-dt ; s s +ds; t t+dt; c o u t « t « v « s « endl ; II Ausgabe in eine Datei

= =

fprintf (puffer. ~'4 .1e \t\4 .1e \t\4.1e\n · .

t ,

v, sl :

I while ( t < t el ; f clo se (puffer ) : s ys t em(" Pa use") ;

Die nachfolgenden Beispie lsdaten d ienen zur Uberprufung des korrekten Programm ablaufs. l1ils s e I'l [kg 1 ~ S8 Federkon s t an t e f [kg / s ~ 21 ~ 88 Dih"pfung skon stilnt e d Lt zs I ~ 8.4 Aus g an g spo sition s 8 [I'll ~ - S Aus g angsge schwindigkeit u8 rA/ S] Aus g iln g s zeit t Ls I ~ 8 S c h r i tt we i t e dt Ls 1 ~ 8 .1 End z eit ee Ls I ~ 10

BUd 2-30 Hcispicldatcn ciner frcicn gcdampftcn Schwingung

Bild 2-3 1 \'-1 Diagramm der Beispiejdaten

a

138

2 Prozedurale Programmierun g

I."" .

,-~ t---~---------­ ........ J . -- ~

- .

... ..... , ~

..,

......- +-

, --

. _~

11 · / -= = = = ~

... _ _

d

./-

Kild 2·]2 s-t Diagramm oc r Beispid dalcn

[l b ungen Ersetzen Sie die Bestimmung der inkrementellen weganderung durch emen Funkno nsaufru f etwa in der form : double ( * f SI

(dou b l e, d ouble, double, d ouble , d ouble ) ;

II f r e i e gedAmpfte Sch wi n qung d ouble fFGS (d o ubl e L d oubl e m, d ouble s , d ouble d . d ouble v i return { f / m*s +2 *d *v ); II Ana l y s e fS do

=

f FG S ;

1

dv: - f S lf,m,s, d,v ) *dt; v = v +dv ;

ds = v *dt; s = a -cs . t

'" t +dt; t

« v « s « endI ; II Aus ga be in e ine Datei fprintf (puff er , "M.le \ t% 4. 1e \ t%4. 1e \ n " , c • v , 5); l-__~)~wh i l e ( t< te); c out «

Dadur ch sind Sit' in J eT Lege. unterschiedliche Schwingungsformen fur einen Berechnungsablauf zu wahlen. So is! die Annahme eine r Iinearen Federkenn linie nicht imrner ausreichend ge nau. In Ff = f' 5( I+ C'5

2)

(2.35)

uberlage rt eine kcbische Parabel die lineare Federkennlinie. Die Dlimpfungskran 15sst sich auch als New ton' scbe Reibung. also dem Q uadrat der Geschwindig keit proportio nal ansetzen:

,

F =c ' sgn( \I) ' \l2 Schwingungen kcnn en auch dUTCh rotierende Massen erzeugt werden.

(2 .36)

2.5 Zeiger auf'Fun ktionen

139

f

ni l r M

,

m, rot r ~+_l.-

d m

BUd 2-33 Er"wlIn1!cne SchwingWig dUTCh eine rotierende Masse

Die im Abstand r auBerha lb des Drehpc nktes mit dec Win ke jge schwindigkeit (Il rot jeren de Mas se rot hal in Schwingu ngsric hiung den Ffiehkraftanteil

F. = mr ' r · (I)l . 5in((,)· t]

(2.37)

Der Ansatz gesrahe t sich wie zuvor mit m s = - f · s - 2 · ( m + m.} -d - v - m l . r . (Ill · sin((I) · r]. wobei m d ie av

~tasse

={ :

(2 .38)

m r bei nhaltet. Es folgt we iter

s + 2dv - : ; rol: sin(Cl)I)ft.

(2 .39)

Diese Gleichu ng ist Hir ein e konstante Wmkelgeschwindigke u ausgeleg t. Anso nsren muss der Algorithmus ein e zusa tzhc he G leichung fI) = flt) bestimrnen. Ein weiterer An wendungsfal l isr die erzw ungene Sc hwingu ng mil rotierend er und osxilfierender Masse , wie sie in Hild 2-34 dargestellt is t. Als Ansatz betrac hten wir da rin ein en idealis ierlen Schub kurbelt rieb . Die vorhandenen Massenkrs tte fhr rotierende und os zillierende Massen werde n auc h als Massen krafte erster und zweiter Ordnung bezeic hne r. l hr Anteil in Schwingungsebene betragt fllr die Massen kraft erster Ord nu ng ang enahert Fl = ml · r. ml. cos('m' t )

(2.40 )

und Hir d ie Massenk raft zwe uer Ordnung FII = mj ·r ·Cij"" ·- cOS·' ((I) · t)

1

(2.41)

140

2 Prozedu rale Prograrnrnierung

(j)/

d

lI ild 1-).1 Er,lwUQ1!'-'TIe Sc h\loingung d urcb rotierende lIDdos zillierend e Massen

Die Dilfe renualgleichung der Bewe gung lautet

(

'(

"

ms.. = - f ' 5 + 2· m ·d ' v - ml -r ' f1) - cos(w t )- , cos· (Cr)' t]

))

(2.42)

Aus d ieser lenet sic h wied er d ie nachfolgende Gescbwindigkeitsand erun g ab

.1\1 = - (

£

s + 2dv- :: ",,2 (cos(mt)- f cos2 «(1)1»))..11

( 2.43)

Untersuchen Sie zum Schluss noch den fa ll, da ss d ie Federmasse mit beracksic bug t wird, Se tzen Sie aile die se Schwingu ngsfonn en als Funktionen ein und schaffen Sie eine Aus wahlmegl ichkeit.

2.0 Callb ack-Funktionen

141

2.6 Callback- Funktionen Eine Callback-Fimkrion nen m man eine Fun ktion, die eine r anderen Funktion als Parameter nbergebe n wird, und von dies er dann aufgerufen wird . Das er laubt es, Funkuonen atlg ernein zu definieren und erst beim Aufrufen de r Fun krion durch Anga be der Ca llback-fu nklion d ie Handlungsweise gen au zu besnmmen. Hauf'ig wird auch die als Ca llbac k benutzte Funkuon nicht fest de finiert. sonde m wird als so beze jchnere anonyme Funk tion zur Laufzeit definiert. Hier ein kurzes Beispiel rUT die Verweedung von Callback-Funktionen. Em Integer-Feld so li auf unterschiedliche Weise sorti ert werden. Dazu mussen zwei Werle in eme r Funktion rrge ndwie miteinand er verg bcben werde n. Beispiel; Ein Feld mil n Elememen soli ur uersc hied lich sortiert werde n int all = {O, 11 , 2 3 . 9 , 34 , 5 ,7. 2 8, 12, 9, 13 , 15} ; Fnr di e So nierung muss ein Vergleich zw ischen zwe i Felde lemente n durchgeftrhrt werden. Beispiel: Allgemeine Fonn einer Vergjeichsfunkti on

I Ve r g l

( i n t: 6[iJ , int: 6[jJ I

Diese wird in einer Sortierfunktio n. quasi als Platzhalt er, eingesetzt. Beispiel: Soru erfu nknon void Sort_a (CompFunc Vergl ) { int: rn, t:; int Anz ; Anz = s i zeof (a l / s i zeof( i n tl ; f or ( i nt i=O ; i;

.endi f

/ * Schei be. cpp

Dieses Programm bestLmmt d i e Sp a nnungsv e r l Au f e in einer r otierenden Sche i be du rch Pl i e hk r &f t e "/

. i nc l ude . inc l ude · Sc he i be . c e · int mai n ( )

1

d ouble w :: 20 9; d ouble r '

d ouble ra :: 2 0 ; d o uble r i :: 0. 5; FILE · p u f f er ; pu f fer = f open ( " C: \ \Ternp \ \Scheibe.da t ", ·w ");

f o r (r=O . 5 ; r< 20 . 1 ; r= r +O. Il 1

f p rin t f (pu f f er , " ' 2 . lf \ t %3 . lf \ t %3 . lf \ n " , r-, sche i b e : :S igmaT(w , ra, ri, r) , sch e i b e : : S igmaR(w , r a , ri , r ) );

s ys tem ( " Paus e " ) ;

Das Programm schreibt die Spannungsdaten in eine Textdatei. Diese wird enschlieuend Excel geladen lind d ie Daten werden als Diagramm (Hild 3-3) dargesrellt.

In

Db ungen

Berechnen Sie aus der radialen und tangentialen Spannung eine Vergleichsspannnng und bestimrnen Sie den Maximat wen mit dem zugehc rigen Radius. Beurteilen Sie durc h Variation welchen Einnu.ss die Radien auf den Sper mungsvertacf haben.

3.1

157

~ odu l e

'" '" .~ ~

.. ~

Max ).

Nein

Max"'}: i= l ( l) n

Wertetn- 2.i)=x(i)

J.

wenem - 3.i)=a(i.x(i» Wme(n+3.n +1F L

Als Anw end ungsfall betrachren WiT 6 Arbeusstationen. die jeweit s mit 6 Personen besetzt sind. Das Arbeusverm egen del Personen an den einzelnen Stauonen wild dUTCh d ie nach folgende Ta belle ausg edrackt.

Person'Stati on

1

2

3

4

5

6

1

7

5

11

13

14

9

2

3

6

15

6

3

11

3

10

6

3

1

2

4

4

7

5

1

6

,

5

5

7

8

3

I'

6

6

4

5

3

6

12

9

Code 3-13 Anwcndungsbcispicl Engp assproblcm - l'IieBbandarbcit 1* Engpa s s. cpp

Das Programm l oes st das Engpassproblem fUr 6 St a t ione n mit jewe ils 6 Pe rsonen

' i nc l ude using name space s td; /1 Definit i on g lobal er Va r i abl e r int n :: 6;

i ot a [6JI6J. iot Max;

7

3.3 Verbnnde

175

IIDek l a r a t i o n der Funktionen v oid Daten n . v oid Permutation ( i n t k , int x( J ); v oid Ausgabe ( i n t x l] ); II HauptprograJ'lTll int main ! 1 (

int i ; II Daten lesen Daten II;

int xI6) ; f or (i:O ; i < n; i + + ) x li] = i ;

Permutation ( O, x ) ; s ys t em(- Pa us e - ) ; II Testdaten v oid Daten {I (

a[ OII O] ::: 7· ::: 5 ; 11 ; a[ O] 13) 13 ;

s roi rn a [ O]12) a [ O] 14) a a a a a

14 ;

[ O] [l ] [l] ll ] ll]

I S) ::: 9· 10) ::: 3 ; (1) ::: 6 · 12) 15 ; 13) 6; a[1]14) ::: 3 ; a[l] ( 5 ] ::: 11;

a[2] [0 ] ::: 10; a[2 ] [I] 6; a[2 ] [2]

3;

a[2] [ 3]

1;

a[2] [ 4] a[2] [5] a[3] [0] a[3 ] [1] a( 3 ) [2] aD) [3] a(3 1 [ 4] a D } [ 5] a [4] [ 0] a [4] [1 ] a [4 ] [2 ]

::: 2; ::: 7· 4; 7; 5; ::: 1; ::: 6· ::: S · 5; 7; S;

a[4 ] [3] ::: 3· a [4 ]14) ::: 1 0; a [4 ] ( 5J

6;

176

3 Modular e Programrruerung a[5][ 0] a[S] [1]

~

a15] [2]

~

a( SI13]

~

a( 5) ( 4) al S) ( 5)

4, 5, 3·

6, 12 ;

9,

II Erstel1ung der Permutat i on

void Permutation (i n t k. i n t xl) 1 int L

y;

y '" xlk); f o r (i ::)(; 1 < 0; 1 + + ) (

x lk l = x[i) ;

x li] '" y ; i f I k< n- 1) Permutation ( k +l. x l ; else Au s g a be (xl; xli] = xlk) ; }

xlk] = y ;

v oid Ausgabe l i n t x[ l ) 1 i nt L , z= O;

for

li=O ;i auch abgeku rzt gesc hriebe n we rden. Sy ntax : Zeiger auf ein Srruktur- Element

I ( *xl . a

x->a

Ob unge n Erwe uem Sie das Programm urn die Bestimmung des Flac heninhalts nach dem Satz des Heron . Erganzen Sie das Progt amm urn die Berechnung ande rer geom erns cher Forme n. Anwcndung!>bcispicl: Baumslrukluren - :\"elzplanrechnik Die Grapben-T beo rie ist eigentlic h eine mathema tische D iszip lin. A llerdings ist sie auch ein wic hug es Werkzeug der ln formatik. urn bestimmte Zosemm enhnnge zu bescbreiben. Ein besonde rer Vorteil fbr den Anwen der ist, dass sic h die Sachverha he leic ht grafisch darstellen lassen. Knotcu

Wu rzel

Kantc

Knotcn

Knot en

BUd) -9 Beispiel cines Graphcn

Ein einfac he r ungen ct aeter Graph besteht aus Knoten und Kamen. Die Kamen verb inden die Knoten. Sind die Kamen ge richtet (Pfeil). so spric ht man von einem geeicbteten Grap hen. Ha-

1.0

3 Modulare Programrruerung

ben die Kamen noch wertigkeiten, wie z. B. die Entfemu ngen von Orten untereina nder. so spricht man von einem gewic hteten Graphen . Vorganger hei Ben die Knoten auf dem Weg zur Wur zel und Nac bfolg er die devon weg . Del unrn inejbare v org s nger hei Bt Vater und aile Knote n m it dem selben Vat er heibe n Bra der . Ein Knoren ohne Sohn heillt Blatt und mit rr nndestens einem Sohn innerer Knoren . :."ietzplanlechnik Die Netzplantechnik unters tntzt und kontrolliert d ie Durch fLihrung von Prcj ekren. weiteren twickeh e Sys teme erlauben sogar die Kapazitat s- und Kostenplanung . Diese einfache GraphenMethode ist im Proj ekun anagement die Erfolgsmethode schlechthin. Netzpla ne sind gericbtere und gewi chtete Graph en. die nach besrimmt en Reg etn erstellt W (' Tden, Die zwe i be ka nmesren Tec hniken heiben PE RT (Program Eval uation and Review Technic) und C P~1 (Critical Path Method]. Nicht nur, dass Netzplll.ne den Ablauf vo n Projekten anscha ulich darstellen. ste zwingen auch rom Durcbdenken des Proj ekts. Aulkrdem Rirdern sie di e Kommunik arion und das Verstsndnis fiir aile Bereiligr en. Wir be trachten nachfo lgend die Methode PERT . Knoten sind darm Ereignisse und Kamen Akrivitaten.

Akti\ -illl 1-2

Q Ergebuis I

erwertete Zeit

Ergebnis 2

mid 3- 10 Elcmc ntc in I'ERT

Ercfgntsse und Aktivitalen Ereigms se (events) sind genau de finiene Zeitpun kte. Dabei kommt dem Anfangs- und Endere ignis eine besonde re Bede utung ZlI . Akuv uaten (acuviues) liege n immer zw ischen zwe i Ere ignissen und verbrauc hen Ze it. Sie werd en als Pfeil dargestellt. Scheina ktivitaten sind Hilfsgroten zur besseren Darstellu ng des Sac hver halts . Sie verb rauc hen keine Zeit. Fur die Dauer einer AkliviuiI werden drei Zeitsc hatzungen erstellt. Eine optimisuscbe. eine wahrscheinliche und eine pessimisrische Zeitsc hatzung . Fur die optimisrische Ze it 10 g ilt. eine kttrzere Zeit ist r uc ht meg lich lind auc h nicht denkbar. Die pessimisnsche Zeit I", darf au fk einen Fall ubersc hritten werde n. Die wahrscheinliche Zeit tw gibt die Zeit an. die man angebe n wurde . ware nur eine Zeitangabe erlaubt . Die erwan ete Zeit berec hnet sich aus der Fonnel 1,

=

1(1 + 4 " ... + t", 6

(3.8 )

3.4 Zeiger auf Strukturen D ie erwartete

Z~i l

lS I

T f: Iiir eine A kuvitat ist die Summe aller Ie vom Startereig nis an

j

2>C i

TE =

( 3.9 )

0

i.. l

Die spnestmogliche Ze it T L zu der eine Aktivitat abgeschlossen sem muss. ist d ie Summe atler t c vom Endergebni s his zur betrachreten Aktivi rat TL

" 2>C i

=

(3.10)

0

i-j

Ats Schluprbezeichner man die Diffe renz

(3.11 )

S =TL - TE o

Die Varianz, ist em "136 rur die Bev..ertung der der Unsicberheit bei der Angabe der Vorga ngsda uer und best immt sich aus

0'

I, ("~ 'o

=

r

(3. 12)

Als Standa rdabweichung 0 wird die WUrLd der Varianz bezeichnet. Sie ist ein MaS filr die G roS~ der Abwelchung. Jede Akti viUU beginnt mit einem Ereignis und endet mil einem Ereignis. Die Ausnahme b ilden das Start- und Endereignis. Eine Aktivitlit kann erst begmnen, wenn das vorherige Ereignis erzielt wurde .

~-----'Q Aktivitlit I

~Q

2.1

Schem nktivitat

Aktivitat 2

AktiviHil 2

Q

8i1d 3- 11 Sd lF [ Kno t e n [i ] . b i s ]- Kno t e n l i) . Dau e r ) F [ Kno t e n [i ] . von ] = F[Knot en[i] .bis] -Kn otenli ).Dauer ;

II Such e n des kritiSChen Pta de s

L=O ; V=O ; f o r l i =9; i >0;- - i l (

Knoten [i]. Schlupf FIKnoten li ].bis ] - S [Kno tenl i).von)-Knoten [i] .Dauer ; i f IKno t e n l i ) .Sch l up f da t a Inh alt ; node->next Anker ; Anker = node ;

= =

d ie List e er zeugen: n ew ListenKnote n; I I Besetze die Date n II H~nge die b i s h erige Li s t e an II Se tze den Anfang spunk t hie r he r

)

while (Inhalt); I I Au s ga be der Li ste i n umgekehr t e r Rei hen f o lge I l und LOs che n de r ausgegebenen Elemente

while (Anke r)

1

II ungle ich Nu l l ! Die Liste i st ni ch t leerl

cou t « Anker ->data « endl; o l d = Anke r ; II sicherung zum sp~ te r en LOs chen Anke r Anke r - >ne x t ; II n~chstes El eme n t nac h vo r z i ehen delete o l d; II LOschung des ausgegebenen Elements

=

3.5 Verkettete Listen

I

191

s ys t em (" Pause " ) ;

1

~l i l verkeuete n Listen lassen sich die Flexibelsten Losungen fUr die Ab lage von Daten erzeugen. Dalen konnen an einem Ende der Lisle einge hangt und am anderen Ende entfemt werden. Es ergib! sich ein Puffer . Wenn das lerzre Element einer Liste auf das erste zeigt, ergibt sich e ine Ringstruktur.

D b ungen

Geben sie die Dalen in del Reibenfolge der Eingaben aus. Erweit em Sie das Progzramm urn die M"Oglichkeit. Elemente in die Liste einzufugen und zu entfemen.

Anwcnd ung..bchplcl: Der Am etsenal gortth mus - .\1asch incn bd l'glm g Bionik Die Bionik ist ein Facbgebiet. das d ie Fachgebiete Biologie und Tec hnik einsch lielJl. Es befasst sich mil in der Natur zu findender Lcs uagen. Strukturen und Prinzip ien und wie wen sich diese rur die Tec hnik umseven lassen. Die Natur bietet eine Fulle von Opumallosungen. von denen das nacbfolgende Beispiel nur einen klei nen Einb lick wiedergeben kann . A mebenalgorlth mu s

Der Amei senalgorithmus wurde in der Tat den Ameisen abgeschaut. Es war der italie nische wissenschenler Marco Dorigo. der 1991 erstmals diesen Algonthrnu s einsetzte. Die Ameis en errlchten zw ischen ihrem Ameisenhaufen und ei ner Futterquelle stets direkt e Strat len. Doch wie mechen sie das. wenn sic schtechr sehen kc nnen und jeder Grashalm fllr sic ein fast unube rwindba res Hinde rnis ist? Dafilr hal ihnen d ie Natur eine wunderbare Einrichnrng gegebe n. Ameisen besitze n am Hinlerleib eine Druse, mit der sie den Locksto lT Pheromon produzieren konnen. Nachfolg ende Ameisen orientieren sich an die sem Stoff und rotgen mil hoher wabrscbemlic bkeu dem am starksten markienen wegen. Doch wie komml es dabei in der Regel zu den kurzesten machbaren wegen? Ameisen-

haulcn Hind... rnis

,

Iallgerer Weg

Full...rqud le

kurzerer Weg

I--====="C ,_0-- - ::>

Bild 3-14 Karzesrc mac hbare Wegc dc r Amcisen

192

3 Mod ulare Programrruerung

Beu achten wir a ls einfaches Modell einen Am eisenhaufen und eine Puuerquelle . Zw ischen beide n Iieg! nun ein Hindem is. das di e Am eisen zwi ngt. einen Umweg zu nehmen. Filr ein e Gruppe vo n A meisen. di e die Fuuerqu elle zu m ersren Mal besucht. ergebe n sich zwei Moglichkeiren: links oder rechts urn das Hmdernis herum. Wlihrend ihres Weges sondern die Arneisen einen Sexuallockstoff also ein Phero mon abo Da abe r noch kein Pheromon vorhegt isl anzune hmen. dass sic h die Gruppe teilt. Die erste Gruppe nimmt den ku rzeren Weg (I) und erreicht die Funerque lle zuerst. Sie wlihlt als Ruckweg wieder de n kurzeren Weg. da ste nun vom eigenen Pheromon des Hinwegs auch zurack geleit et wird, D ie zweite Gruppe (2) mit dem langeren Weg kommt danach auch zur Funerquelle und nimmt nun. da der kurzere weg bereits doppelt mit dem Pheromon de r ers ren Gruppe gekennzeichnet ist als der tangere (nUT einmal dUTCh Gruppe 2), nun eben falls diesen Rackweg. So kommt es zu einer erneuten Vers tarkung der Wegkennzeichnung. Fur aile nachfolgenden Ame isen ist der Weg vorgegebe n und wird im mer star ker gekennzeic hner. Es emste bt eine Ameisenstrage. Sie seben. eine einfache aber sehr wuksame Methode der Natur. Die Natur regen di eses System aber noc h weiter . W ind. Regen. Waldtiere und andere Ein fh j sse sorgen dafllr, dass nUT die aktuellen Wege gekennzeichnet blejben . Ein wei terer Srcrfaktcr liegt dann. da ss Amei sen slch durch aus auch emme t den Iangeren weg au ssucbe n konnen. bzw. ande re Wege suchen. :\1oglich erw eise linden Sie so elnen noch ka rze ten weg bzw. es wird verhindert. dass ein w eg zu dom inan t wird und das Finden besserer Losu ngen verhinden. Hier w irkt ein Mechanism us, den wir bei den genetisc ben Algo nt hme n au ch kennen und der dort als Mutation bezeic bnet wird. A ile diese Mech anismen andern j edoch nichrs am Grundprinzip. Die Frage isl nun. wie dieses Prinzip im Compu ter nachge bildet werde n kan n. Eine PseudoAmeise ve rhalt sich ebe nso wie ihr naturhc hes Vorb ild und mac ht ihre Enlsc heidung abha ngig vo n der Pheromon-Au spragung alter moghchen Losungen. Das klassische Mod ell isl de r Weg eines Hande lsreisenden, der nachein nnder verschiedene One besucht. Umgesetzt fl lr unsere Pseudoameise wird di ~ Sllirlee des Pheromo ns dUTC h eine Zahl ge kennze ic hn~l. d ie in eine r Entfemu ngs malrix aile M: oglichkeiten beinha hel. :\i ii dieser :\1alrix kann d ie Pseudoam eise eine Auswah llrefTen. T llhl"lIt 3-11 Ik ispicl cincr

I'h~'romo n -M atr i x

0",

A

B

C

D

E

A

-

0.2

0.5

0.4

0.5

B

0.2

-

0.3

0.5

0.•

C

0.2

0.5

-

0,4

D

0,3

0,4

0.3

-

0••

E

0.5

0.3

0.2

0,4

0••

-

Die Auswahl wah rschei nlichkeit w ird auf ' i nc l ude u s ing name s pa c e std; v oi d Date n

(J;

i nt main (J {

double double double int i , double double

Ar [1 00] [8] ; II Array mi t l OOx12 El eme nte n e rzeugen x la, yla , xln, yI n , dxl , dyl; x2a, y 24 , x2n , y2 n. dx2. dy2 ; f , ml , m2 , m3; a , X; 114 , 124 , 13a , 14 4 , l 5a ;

20K

3 \1odulare Programmienmg double lIn, 12 n, 13n, 14 n , 15n; double g124 , g1 2n, g3 4a, g3 4n; s r a nd( t i me( NULLII ; II Zu f a 11s ge ne r a tor I n i t i a 1i s i e rung

,

f or ( i =O; i 16 3 . 8 6 117.771

11' .I'.>s I Si .He

I

.,., .4112 17t..l]{' Ib.88H

h

b b h

b b b

b b

1.9b939

17. H'H 6'1.S_ l lJ'/ .278 SS . 4 4'\ '4

1S3 .983 n.8H2

l lH .2r.1 4 .H 117

7'1.891 .)~

US4 .4 7 18 1 . 7 1 B

lJild .&·3 Umfa ng und t'llid lC zufallsbcdingter k ec htecke

Die Suu ktur wurde erweitert. urn au f die berec hneten Daren zugzreife n zu kOnnen. Die Berechnung ist immer mil der lnitielisierung einer Strukrur gekoppelt. Eine so1c he Kopp lung gestauer eine Klasse. Sie enthalt n icht n UT die Eigenschaflen. sondern auch die Methoden. C ode -1-3 Dcmop rog ramm - Auswe rtung zufallsb cdingtcr Rcc htcc kc mil Mcthode n

/ - Re chte cke _ 3 . c p p Das Programm ers tell t 1 0 z ufall s beding t e Re chtecke und ber e c hnet ihr en umf ang u nd i h re Flache

';

' in c l u d e ' inc l u d e c lass Re cht e ck {

publ i c : // Attribute d ouble 1 ;

2 16

4 ObjeklOrientiet1e Programmierung

d ouble b ; d ouble U; d ouble A ; 1/ Methoden Rechteck (dou b l e Ii , d ouble bi ), l (li ) , b (bi ) (

u

.

2 · ( l +b) ; l ·b ; cou t « "! • « ! « -\ t b • « b « - \ tU • « U « -\ t A • « A « endl ; A



I, int main () (

int i ; d ouble x , Ii , bi ; sr~nd (time INULL I I ;

f or ( i=O; i< lO; i ++1 (

x = d ouble (rand ( J /double (RAND_MAX I I ; H = x·2 00 ; x = doub l e( r a n dl)/doubl e( RAND_ MAX)) ;

bi = x ·H ; Rechteck r i

(I i, b i ) ;

I

s y s t em ( - Pa use-);

1~1.Yn

1111. SY.J Y7.2117b 5b.IH) Jb.k I

•• ••• ••• •

12b.11~

se . S19

8y .n15 9.n11~

12.7?1 b.1I1817 IS1.9b1 9J.8In 127 .IIJ 1114._ 87. '1291 ~J.1 I1Y7 178.h1l7 8) .2'1 '17 D~ii.82 2'-'116.'6 J

•• ••

urns.

r ..... .

Erwcucn e Auswert ung zufallsbe dmgtcr Rechtecke

[I bun gen

Nach del' Durcha rbeitung des Kepirels Objektorientiene Programmierung lassen sich mit diesem Programm weuere Cbunge-n durchfljhren. Zunachst einrnal sollre die Eingabe von Daten verallgemeinen werden. Dann konnen zusatzliche Klassen Kreis und Dreiec k eingefahrt werden . y





x

Bild 4-7 Gco me tri schc Formcn im Koordinarensystem

Aile diese Formen habe n die gleichen Eigenschaften bezflglich eines Koord inatenursprungs, namh ch ihre Abstande X s und Ys. lis b ietet sich daher an. eine Klasse Porm en zu erstellen und diese als Ober klasse Z1.1 beuacbten. Wie dies geht wird nach folg end beschrtebe n.

220

4 Objektonentierte Programrmerung

4.2 Obj ekt e und Klassen In diesem Kapite l erweuern wir den Datentyp srmct. Zu den selbstdefinierten Variablen defi nieren W iT auf Ihnen ope rierende Funktionen und erhalten so Objekte. Die Variablen (auch Datenelememe ode r Attribute) stellen die Eigenscha uen des Objekts dar. Die Fa.higkeilen werden als Metboden. Memberfimktionen oder Elemerutunknon en bezeichnet. ~ i t dieser Konstruktion erlaube n Objekte die Nachbildung rea ler Strukturen in der Programmierung . \\'ohld efln ier th eh

In der lnformauk ist ein Obje kt e in wohldefini erter Begriff Zur Wohldel'iniertheit von Obje kten gebort : •

dass sic: einen Lebenszyklus haben. Objekte werden wahrend der Programmlaufzeit erzeugt . genutzt und dann wiede r vernic htet (spatestens rom Programme-ode). dass sie eine Oberflache (auch Schniusrelle oder Interface gena nnt] besitzen. Die Schnit tstelle legt fest. wie das Obje kt mit seiner Umgebung kornmuni zieren kann, also auf welchen Daten es operien . dass sie ein Innenleben besitzen. Wie das Obje kt die Daten nutzt. ble ibt in der Regel dem Berrachter verborgen. Ledig fich die abe das Interface ..vereffenrlic hten'' Dalen sind dem Nutzer zuganglich, Man spricht von Kapselung. Diese s Prinzip kennen wir bereus von der Black box. aus der prozeduralen Programmierung . Auch dart gibt es Inputs und Outpots. Die verarbeuung gescbieht in der ..schwarzen Schac hter',





Der Bauplan, nach dem Objekte entsrehen, wird als Klasse bezeic hnet. S) n IU : K lass ," in C++ c l ass Kla s senname private :

Var i ab l en un d Funkti onen innerhalb d er Klasse bekannt ;

p ublic :

Variablen und Funk t ion en v on auBen zugangli ch ; J,

Als Objekte betrachten wir ebe ne Kreise. Allen geme insam iSI ihr Atmbut Radius. Ihr Baupla n sie hr also wie folgl aus : Clld l' 4 -~ Die Bcispiclklassc Kreis

1* File : Kr e i s .h * 1 c l ass Kr e i s (

p rivate, fl oat Radius; Ilp r i v a t e Va r i a b l e public , v oid s e t Ra d ius (floa t ) ; IIDek l a r a t ion eine r Sch r e i bme t hode f l o a t getRadiu s (); IIDek l a r a t ion e i ne r Le semeth ode

4.2 Objekte und Klassen

221

Den Klassennamen beruuzt man in der Regel irnmer in der Einza hl. Die Prafixe set und get werden von mir standa rdmllBig genutzt, urn die lnformationsrichtung enzug eben.

Zu griffsebenen AuBerdem gilt die Regel , dass j ede Klasse nur so viele Details Ilber ihre Wirkungswei se .vero ffentlichen'' sollte. wie zur ErfiilJung ihrer Aufgabe unbed ingt nong isr. Jede Klasse hal dam verschie dene Zugriffsebenen. Klessenelemente (Eigenscbaften und MethoJen ) konnen sich im pn varen Bere ich l,prn'are:), im OfTenllich Bereich v m hlic:) ode r im geschucren Bereich (proreered:) befinden. Lem ere sp ielt nur bei vererbungen eine Rolle. Dazu spa rer mehr. Hier ist auch der einzige Unterschied zw ischen einer class- oder struc t-Deklaration. Bei einer Klasse sind ohne Anga ben aile Eigen schaften und Method en privet. wllhrend bei einem suuct aile Eigenschaften und Methoden offenthc h sind . Durch di e Angaben "public:'· und ..priva te:" werden nachfolg ende Angaben offe ntlich oder bleiben verboegen. In unserem Beispie l isl d ie Variable Radius nur fllr eine Nutzung innerh alb der Klasse dekla riert, wahrend die Funktionen setRadius und getRadius dur cb die Angabe public offemlic h zugangfich sind

Exte me ;\Ielh oden und Kapsefung Klassendefinitionen werden im Sinne der Wiederverwendbark eit in eigene Header-Dateien (Name.h) gese tzt und dann im Anwendungscod e inkludiert. Es hal sich a ls sinnvol l erwiesen . de r Header -Darei den gleic hen Namen zu geben wie de r in ihr definienen Klasse. Inner halb der Klassendefimtion werden die Methoden nur de klanen (aiehe eben Kreis.h) Die Definition en der Merhoden erfolgen dann in einer gerrennren Oue llcode- Datei. d ie ebe nfalls sinnvo ller weise den Name n de r Klasse erhan . deren Met hoden in ihr definiert werden mil der Extension .cc anste lle von .h. Man nimmt hier . CC, urn sich berehs optisc h vom nblichen Anwend ungscode mil .cpp zu unrerscheiden . In der Anwendung wird da nn zuerst d ie Header-Dater mit de r Klassendefinition eingebu nde n und dan ach folgen d ie entsprechenden Methoden-Defmirionen. Dabe i ist Foigendes zu beachten: •

Innerhalb der Klasse wird di e Meth ode nur deklariert. Die Deklaration erfolgt in de r gleichen A rt und We ise wie bei Funktionen.



Hei der Definition der Method e aufterhalb de r Klasse ist es er forderfich. den zugehorigen Ktassennamen mit anzugeben. Dam wird nach dem Returntyp und vor dem Nan-en der Methode der enrsprec hende Klassenname gefolgt vom Scope -Ope rato r (::) angeg ebe n.

CudI.' 4-6 Mcthod cn dcr Hcispiclkla ssc Kreis

/ * Fil e : Kr e i s . c c * /

v oid Krei s : :setRadius (f loa t r ) Rad i us = r ; fl oat Kreis"ge t Rad i us ( I {

222

I}

4 Objektonentierte Programrmerung

return Radi us ;

Da bei der Defin ition der Methode auBerhalb der Klasse der Klassenna me mil angegeben werden muss, kcnnen versc hiedene Klassen ohne weueres Methoden mit gleichem Namen besuzen. Der Compiler kann die Definition der ~ ethoden d UTCh die A ngabe des Klassennamens immer eindeut ig zuo rdnen. Diese Auft eilung hal noch einen .....eiteren Vorteil. So li eine Klasse we ne rgeben werden. so reicht es aus. die Header-Datei (Name. h) und die nberseizre ~l ethode n· Dal ei (Nal11e.obj) weiter zu gebe n. Der Anwender der Klasse muss be i ihrer Verwendung lediglich die Header-Darer einbinden und zu seinem Projekt noch die erusprechende .vume.obj Datei daz u linken. So bleibt der Quellcode im v erborgenen .

Das nachfolgende Anwend ungsbeispiel erzeugt zwei Objekte Kreis l und Kreis2 mit den Rad ien 29 und 32 und gibt anschlieBend den Radius " om ersren Objekt aus: COOt 4-' Dcmoprogra mm - Nutzun}!der Klasse Kreis

1*

~ il e :

Kre i s . cpp * 1

' i nclude ' i nclude *Kr e i s . h " 'include - Kr e i s . cc"

,

i nt mai n ( I II Deklarat i onen

fl oat Kreis radi us;

/I Objek te r zeugung un d Va riabl ende k l a r a tion

Krei s Kreisl , Krei s 2 ;

as ge setz t Krei sl . s etRadius (2 9) ; /I Attribut Radi us v orn Obj e k t Kreis2 au f 32 gesetzt Krei s 2. setRadi us (32) ; /I Attr ibut Radi us v orn Ob j e k t Kreisl au f

Krei sradius =Kr e is l . ge t Ra d i u s() ; cou t « Kre i sradius « endl;

Il i e s en eine s Att ribut s

s ys tem( " Pa use"} ;

Jedes Objekt einer Klasse besitzt seine eigene Kopie alte r Ktassen variablen. Man spricht davon, dass ein Objekt die lnstanzierung einer Klasse ist. Der Zugriff auf die Attribute erfolgt uber offentlic he Methoden . Beispiel : Direkte Zuweisung an ein Element ist nur bei l'uhlic-deklarierten Klassenvariablen ertaubt

I Kreisl . Ra di u s

= 29 ;

4.2 Objekte und Klassen

223

Kon st ruktor In C++ werden die Objekte be i der Erzeugung initia lisiert. Die Klasse stellt dazu eine besondere Methode bereu . den Konstruktor. Der Konstruktor existiert Iilr aile Klassentypen (union. struct. class). Er hal den Namen der Klasse und besitzt keinen Ruckgabewe n . Wird der Ke nstruktor explizit nicbt angegeben. erzeugt der Compiler einen Standard-Konstruktor. Datenelemente ohne explixite Konstruktoren sind undefi niert. Beu achten wir dam unser Beispiel und era anzen WiT unsere zwei moglichen Konstruktor en.

~l ethodendek l arat i on

dUTCh d ie

C od e 4-8 Die Klasse Kreis mil Konstruktoren

1* Fi l e : Krei s _l . h *1 c l ass Krei s [

private : f l oa t Rad i u s ; Ilp r i va t e Va r i abl e p ublic : Kr ei s ( J ; II St a nd a r dkon s t r u k to r ohne Parameter Kre i s lfloat : 2 9 J ; Il al l gemei ne r Ko nstruktor vo id setRadi us ( f loa tJ ; f l oat get Radi us {J ;

Auch Illr Merhoden gill genauso wie ffu nonn ale Funktionen des Prinzip der Uberladung. wonach sie sich bei gteichem Namen dUTCh ihren Rnckgeb eryp oder Param eter (in Typ und Anzahl] unterscheiden Cod e 4-9 Dcmoprogr amm - Obc rladL'JI von Mcth odcn

1* Fi l e : Kre i s _ l . c c *1 Kr eis : : Kr e i s ( f l o a t r ) I

Rad i us )

=r ;

v oid Kr ei s : : s etRadi u s ( f loat r )

I

Ra di us = r ; )

f l o a t Kr e i s : :ge t Radi u s ( ) (

re t u r n Rad ius ;

COOl' 4-10 Dcmoprogramm - Nutzung dcr Klasse Kreis Version 2

1* File : Kr e i s . c pp *1 ' i nc l ud e

224

4 Obj eklOrientiet1e Programm ierung

linclude "Kr e is_ I . h" l i nc l ude "Krei s_I. cc "

,

i nt main I ) II Deklarationen f l oa t Krei sradius ;

Krei s Kre:l.Sl t 2 !:1) ; Kreis Krei s 2 (32 ) ; Krei sra dius =Kr e is l . ge t Ra d i u s(); cou t « Krei sradius « endl ;

Il i e s en eines Attribut s

Betrachten wir nun einige Dreiecke im Kooedmatensystem y

Dreie ck2

1

-3

1

2

3

4

5 x

Dre ieck3

'--::L .2

Kild 4-1' Drcicc kc im Koordinatcnsystcm

Jedes dieser Dreiecke hat eine beliebige Fonn und Lege. Allen ge memsam is!, dass sie mit drei Punkten in der Eben e Iestgelegt. also aile ve rn gleic hen Objek ttyp Dreieck sind. Durnil konnen wir wiede r einen Konstruktio nsp lan der Klasse Dre ieck anlegen. Dies wo llen wir zuerst in gra fische r Fonn lun. Die nac hfolgende Dars tellung einer Klasse lehnt sich an d ie Konventionen der ..Universal Modellin g Langua ge" (kurz: U:V1L) an.

4.2 Objekte und Klassen

225 D~ei eck

N"me

xr. VI

»a. V2 x3, V3

"" " e x ,s t , ,, ..., n 1 ObJekt(" > " ,,"ost,eren lJ ObJ "kt (e )

Dr... ~ k" n lO ll'

."ne

beh ",bl'J" Td st " . . .

Bild " -16 Ausgabe des Programms mil der Anzah l vor handcner Objekre

Sta rtsche vl eth ed e Eine starische Methode wird eben falls wie eine starisc he Eigensc halt defimert - auc h sie ('Thalt des Schlussel won static. COO t " -38 Deklallition dcr stenscfen Eigenscbaft Count und der siatische n Methode KetCo unl / * Dreieck_ l O.h

0'

Def i n it i on der Klas se Oreiec k mit de r s t4 t isc he n Eig en s chaft Count umd mi t de r s t a t ische n Met h ode ge t Coun t

,

c l a s s Drei e ck II Eigensc haften p r i v a t e: c ha r Name [2 0 1 ;

d oubl e x l ,yl , x2 ,y2 , x3 , y 3 ; static i nt coun t ;

/ / Me thode n public: I I Zlih ler lesen s t a t ic int ge t Coun t ( ) re t urn Coun t ;

}

,

Dreiec k (c h a r Bezl ) , double aI, double doub l e a 2, doubl e double a3, doub le - Dr e i eck (I ; v oid Ou t put ( I ;

bl,

b',

b3 ) ; 1/ defau lt Des t r uk t or

Das Besondere an statischen Methode n ist, dass sie wie statiscbe Eigenscbaft en aber den gesa mten Ausfnbrun gszeuraum des Programms exisrieren. Sie kdnnen auch ohne Angabe eines

4.3 Spezielle Obje kte und Merhoden

255

Objekts, namlic h direk t uber den Klessennamen aufgerufen werden. Daraus resultiert die Bescbrankung. dass statische Methode n nur auf stat ische Eigen schaften zugreifen d tlrfen, Au f welche Objekt-Eigen scbaften soli auch zugegriffen werden. wenn die Met hode dire kt aber de n Klassenn amen au fgerufen wird und es beis pielsweise uberhaupt kein Objekt g ibt? Nachdem die Klasse Dre ieck nur eine einzi ge sratisc he Bigenschan defiruert. dar f in der statiscben :\i ethode ge tCou mO dah er auch nur auf diese Eigensch aft zugegriffen werde n. Code ....19

Dcnmnon lkr S1alischc n Eigenschaf Count und der statiscbc n Methode gt:tCo unl

1 * Dreieck_lO . cc

.,

Definition der Methoden zur Klasse Dreieck mit der s t a t ische n Eigenscha ft Coun t

II Wichtig ! St a t ic Va r i a b l e mQssen ext r a def iniert werden

int Dreieck : : Count : 0 ;

II Konstruktor Dreieck : :Dreieck (c ha r BezlJ , double aI , double bl , double a2 , double b2 , double a3 , double b 3 1 : xl (a1) , yl (bl l , x2 (a2 ) , y 2 (b2 ) , x] (a ] ) , y3 (b3 1

strcpy (Narne, Bez); ++Co un t ; II Destruk t or Dreieck : : - Dr e i eck () I --Coun t ; II Aus ga be v oid Dre i e c k : : Out put ( ) I cout « e ndl -e-c « e ndl ; cout « -x t • « xl « endl ; cou t « "y l • « y 1 « endl ; « x2 « endl ; cout « "x2 • « y 2 « end l ; cou t « "y2 • « x3 « endl ; cout « "x3 • cou t « "y3 • « y 3 « endl; I,

N=.

D ie statisc he Me thode getCo/lllrO ist so defin iert. dass sie einfach den Wert der Eigenschall Count zuruckgibt. Auf di ese Weise kann die Eigenschaft gelesen werd en. was ende rs wege n des Zugriffsaurj buts private in der Klassen-De finitio n nieht moglich ware. Es ist kein Problem . von instanzierten Merhoden auf stausche Eigenschaften zuzugreifen. Anders herum ist es jedoch nicht ertau bt. namhch von starischen Merhod en au f instanzierte Eigen schaften zuzugreifen.

256

4 Obj eklOrientiet1e Programm ierung

Nac bdem di e Klasse Dreieck erweitert wurde , wird sle in folgendem Beispiel-Programm eingesetzt. COOt' 4--10 Dcmop rogramm - stausc be Eigcnsc baft Co un t und statischc Method e ge fC(Junl

' " Drei eck_l O. cpp Dieses Pro gramm erzeugt e i n e Kl a s s e Dreieck i n stanziort mehroro Obj o k t o d e r Klass o un d meldet d en jewei ligen Zustand des Z~h ler s

0'

'include < ios t r e arn. h> 'include " Dr e i ec k_ l O _ h ~ . i n c l u d e ~ Dr e i ec k_ l O . c c ~ int main () (

"

Deklaratio nen c h a r Bez( 2 0) ; i nt i ;

"

Obj e k t e v om Typ c l ass Dreiec k definie ren s t r cpy t sea • - n r e Ieck 1 " ) ; cou t « «

" Es exi stieren • « • Ob j e k t( e) \ n";

Drei e ck : : g e t Co u n t ( )

Dreieck Dreieckl ( Be z, 1 . 0 , r .», 5 . 0 , 2 . 0 , 2 . 0 , cou t -c ~E s existieren « Dreiec k ::getCoun t ( ) « • Obj ek t( e) \ n~ ; Dreiec k Dreiec k2 (Be z, 2. 0 , 4 . 0 , r. », 3.0, i .c. 2 . 0 ) ; « Dreiec k: : g e tCoun t() c out -c ~ Es exi stieren « ~ Ob j e k t( e)\ n" ; cou t « « cou t « -c

" Es e x ist ier en " Ob jekt (e) \ n " ;

" Es e xisti e r en " « " Objek t (e) \n";

~

«

Dr ei e ck : : g e t Coun t ( )

Dreiec k : : g etCount { )

sys tem ("Pa use");

In der Funkrion mU;1I0 werde n zwei Objekte vc m Typ Dreieck angelegt. Dureh d ie gescbwelften Klammem wird der Gultigkeitsbereic h der Objekte eing eschrankt. Die stausc he Meth ode gerCOIlllrO der Klasse Dreieck zeigt jed esmal nach einer Verande rung den Zustand des ZahIers. Die Ausgabe ze igt bereit s Bild 4-16.

257

4.4 Klassenhi erarchie und vererbcng

4.4 Klassenhi erarch ie und Vere rbung Fur die Berrecbt ungen in diesem Kapit el rnussen wir eine Klassenhierarchie ein ftthren. Dies tun wir in grafischer Form auf der Basi s von UML \Vie Klasse n im Klassendia gra mm dargesretn werden. baben wir ja berei rs besprochen . Auch die nacbfolgenden geomemschen Objekte betrachte ich als informat ische Obiekte. deren visuelle Reprasema uon zeige ( I;

Die Wirkung der Anweisung kann deshalb ers t zu r Laufzeit ermittelt werden. Bever wir da s Programm schreiben. erstellen wir vorher noch ein Klas sendiagramm Es Ieistet bei der spa teren Programmierung gu te Dienste.

Pigur

Pun kt " x Pos: lm It y Po s: int

- Figur [ x. y) + k igo.'(l

- Punkl [x. y)

+ Loesch,-,() + Bc \\' e~e()

-T

Ze ige ( ); do

,

c o u t « - \n \ nMenue: [R ]echteck I K] r e is c i n » c ; II auf Taste ndruck wa r t en cout « endl ; switch ( t o upp e r (e l l

( B] ewege

[ El n de ";

(

case ' E ', b r e a k ; c a s e ' R ':

a k tue l l e Figur->Loesche 11; a k t uel l e Fi gur = &R ; a k t u elle Figur ->Ze i ge {J ; b r ea k ; } case ' !C':

akt uelleFigur- >Loes che (I ; akt uel leFigur = &K ; a k tuelle Fi gur- >Ze ige (I ; b r e a k; c a se ' B' : II Bewegung cou t « - Bewe gung : (L ]ink s c i n » c; s witch ( toupp e r (el)

l R] ech ts

[Ol ben

[U]nten " ;

(

case case c ase c ase

' L' : aktuelleFigur->Bewege ' R' , a ktuelleFigur->Bewege '0' : aktuelleFigur->Bewege ' U' , a ktuelleFigur ->Bewege

I while (toupper (c)

!=

( - 1 0, 01; break ; ( 10, 0) ; break; (C , 1 0 ) ; break ; (0 , -10 ) ; b reak ;

'E');

Ubllng ( rbe n ragen Sie d ie Klassen in einzelne Module und binden Sie sie mil ttinclude ein. Erganzen Sie dieses Programm mil einern ec hten Grafiksyslem.

Die po lymerphe Lisle Eine typische Anwendung der spaten Hindung sind polymorphe Listen. Ein CAD-Programm zum Beispiel muss eine vielza hl verschiede ner Obj ekte speichem. Hierro definiert man eine abs trakte Basisklasse mit virt uellen Funktionen. von der aile bencrigen Objekuype n abgeleitet

4.5 Virtue lle Funktionen

279

werden konnen. A Il~ Objekte konnen dann in einer Liste von Zeigem au f die Basisklasse verwa llet werde n. Eine BildschinnaufTrischung besteht dann ein fach darin. da ss rur aile Elemente der Liste die virtuelt e Method e zum z eictmen aufgeru fen wird.

A" ul'nd ungsbdspiel: Ktasscn hier archlc - Blcgctra ger Bisher habe ich zum Vers tandnis aller lngenieurbereic be als Beispiel geo metrische Forme n gewlililt. Nacbfolgend so li als Praxisb eisp iel d ie Berechn ung vo n Biegei ragem Iolgen. Dabei beginnen wi r mit dem ~ia le ri a l . Material +

~tal:-Jame :

char

+ EModul: double + QuerZah I: double

+ SModul 0

Bild .. -27 Oil' Klas."C Material

Die se Klasse hat auuer dem Namen noc h das Etastizi taumodut und die Qllerkufltraktiol/.fzahl IPoissonzahh als Allribute. Oil' ~I ethode SM(J(lul bestimmt das Schub modu l des Materials. Damit erg ibt sicb de r nach folgende Code . Code .. - ~ Oil' Klass.: Materia l / * Ma t e r i a l.h Def i nitio n d e r Attr i bute z u r Kl a s s e Mate ri al

"f class Mat e r i a l {

pub l i c , c h a r MatName [ 20 1; d o ub l e EModul; / * Elast iz itaetsmodul i n kN /mmA 2* / / * Querkontrakt i onszahl * / d ouble Quer Za hl;

/ * Sch u bmod u l * / do ub l e SModu l J,

() ;

Code 4-:':' Oil' Method e tier Klassc Material / * Mate rial. c c De finit i o n d e r Me t h o den z u r Kl a s s e Mate ri a l "f

280

4 Obj ektonentierte Programrmerung

1 * sch ubmodu l * 1 d ouble Ma t e r i a l : : SModul

I)

(

r e t ur n EModul / (2 * ll +Que rZahl ) l;

Ein einfecbes Progremmbe ispiel demonsmerr die Nutzu ng der Klasse Material. Code .t.!'6 Dieses Dcmoorogramm instanziert drei Objekte dcr KJas."C Material.

1* Material .epp Oieses Programm erzeugt eine Klasse Material und i n stanziert mehrere We r k s to f f e "/ ' i n c l u d e < ios t r e am. h> ' i n c l u d e - Ma t e r i a l. h" ' i n c l u d e - Ma t e r i a l.cc" int mai n (I (

II Deklarationen Material St, Cu , AI ; II Instan z i e r u n g e n s t rcp y( S t. Ha.t Name, -St a h l-) ; S t . EHodu l " 21 0 ; S t. Qu e r Za hl " 0 .3; st r cpyl Cu. MatNarne, Cu.EModul " 12 0 ; Cu .QuerZahl " 0. 3 3;

~ Kupfe r -);

s trcpy (Al.MatName , "Alumini um" ); Al. EMo d u l " 7 0; AI . Qu erZa h l " 0.33; II Au s g a be c o u t « "Berech n ung : " -c end l; cou t « St. MatName « " - " « "S Modul " « S t .SMod u l (} « endl; c out « Cu . Ma t Na me « " - " « " SMod u l " « Cu . SMo d u l() « e n d l; c o ut « Al .MatName « " - " « " SMo d u l " « Al.SModu l( ) « e n d l ; sys tem ( " Pause ") ;

4.5 Virtue lle Fun ktio nen

281

8erechnllng; S t a h l - S I'tOd ll l = 80 .7692 k N/AA A2 Kupf .. r - S l'to dli l - 45 .1128 k N/""" A2 AlliAiniliA - Sl'to dli l - 26 .3 158 kN/AA A2 Druck e n S i .... ine bell.ebige Ta >:t .. . . .

lJild 4-21' Die Ausgabc des Dcr noprogramms Material

1m nacbste n Sc hritt fnbren wir d ie Klasse de r Trager ein. Urn die Auribute und Merhoden des Materials nutzen zu koone-nowerden sie vererb r. Traeger

Material

+'r.\ame: char + Breite: double + Hec he: double + Lacnge: double

+ Matx ame: char + EModul: double + Qu erZahl: double + SModul ()

+ HMomcntO

BUd .. -29 Die Klasse Tracge... erta von der Klasse Material

Diese Klasse hat a uuer dem Namen noc h die Ouerschmnsmeee und die La nge des Tragers. :vIit dern Qu erschniu berec hnet sich das Flacberuraghe lrs mome nr. lias die Meth ode FT ~1 besti mrnt. Damit erw eite rt sich der Cod e wi e fotgt. Code 4-S7 Die Klasse Traeger

/ . Traeger. h Definition d e r Klasse Tra e ger

"'

class Trae ger

pu blic Mat eria l

{

p ub lic , / . Attr i bute . / char TNarne [201; double Bre i t e ; double Hoehe; double La e nge ; / . Met h oden . / double FTMome n t }

,

/ * Quers chni tt sbrei t e in mm* / / * Que r s c hni t t s hoe he in mm* / / * Tr a e ge r l a e nge in mm· / (l ;

Code ... ~ Die Method cn der Klassc Traeger

/ . Tr e eqe r , c c Met hoden der Klasse Traeger

/ . Fl a ch entr a ghei t smome n t in

cm~ 4

./

282

4 Objektonentierte Programmierung

"/ 1 * FI~ chentr4ghe itsmoment * 1 d ouble Traeger::FTMoment I) (

d ouble FTM ; FTM = Breite*Hoehe *Hoehe *Hoehe ; FTM FTM / l ~ /l u u u u ; return FTM ;

=

Auch hier wone n wir mit einem kleinen Demoprogramm die Korrektheit oer Deflnitionen nberprafen.

1* Tr a eger.cpp Di eses Programm erzeugt eine Klasse Traeger und instanziert mehrere Obj e k t e "/

. i nc l ude .include 'include 'include 'include int mai n

"Ma t e r i a l . h " "Ma t e r i a l . cc " "T r a ege r . h"T r a ege r .cc"

(I

(

II Deklarat i onen Traeger Tl , T2 , T3 ; II I n stan zierungen strcpy(Tl.TName , " Qu e r t r a e g e r" l ; T l.Breite :: 2 0; T1 .Ho ehe = 6 0; T l .La eng e = 12 0 0 ; s t rcp yl T1 . Ma t Na me , "S t a h l ") ; Tl.EMo dul = 210; Tl.QuerZahl :: 0 .3;

s t r c p y (T2 . TNa me , "Stuet zt raeg e r"); T2. 8 reite = 30; T2.Hoehe = 80; T2. Laenge = 22 0 0; s t rc p y (T2 . Ma t Name, " Kup f e r ") ; T2.EModul :: 12 0; T2 .QuerZahl :: 0. 3 3; s t rcp y( T3 . TName , "La e n gs t r a e g e r "l; T3 .Breite =22; T3 .H oehe :: 7 6; T3 . Laenge = 18 0 0 ; strcpy (T 3 .HatName , - Al umi n i um-) ;

4.5 Virtue lle Funklionen

283

T3 . EModul = 70 ; T3 .Q u e r Za h l = 0 .33; / / Aus gabe cout « " Berechnung: " « endl ; cout « "Traeger = " « Tl. TNarne « endl ; cout « "\tMaterial « Tl .MatName « endl ; cou t « " \ tS c h u b -Mo d u l = " « Tl . SModul () « " kN / nun" 2 " « endl; cout « " \ t FTMorne n t = " « Tl .FTMornent() « " =" 4" « end! ; cou t « "Traeger = " « T2 . TNarne « endl; cout « "\tMaterial = " « T2 .MatNarne « endl; cout « "\tSchub-Modul = " « T2 . SModul ( ) « " kN / rnm" 2 " « e ndl ; cou t « " \ t FTMorne n t = " « T2 .FTMornent() « " =" 4" « endl ; cout « "Tr a e g e r = " « T3 . TNarne « endl; cou t « "\tMaterial = " « T3 . MatNarne « endl; cout « "\tSchub-Modul = " « T3 . SModul ( ) « " kN/rnm"2 " « e ndl ; cout « "\t FTMornent « T3 .FTMoment( ) « " =" 4 " « e ndl ; sys tern ( "Pause" ) ;

="

="

B.. .... c hmmg: Tr a e g e r ~ Que r tra e g e r Ma t eria l = Sta h l Schub- Modul ~ 80 .7&92 kH/AA"2 FTMoAent = 3& cn"4 Tr a eg e r ~ Stuet ztrae ger Ma t eria l = Hupf er Sc hub- Modul ~ 4 5 .11 2 8 kH/AA"2 FTMoAent = 1 28 c A" 4 Tr a ege r ~ La e ng s t r a eg el' Ma teria l = Al un i ni uA Schu b - Mo du l ~ 2&.3158 kH/AA"2 FTMoAent = 80.4789 c n "4 nriicken S i e e i ne beliebig e Ta s t e . _ .

Hild 4-30 Die Ausgabc des Dcmop rogramms Traeger

A ls weirerer Schritt folg t nun die Einfiihn mg der Klasse Last/all. Narurlich soli auch diese Klasse die Attribute und Methoden de r ande ren Klassen erben . Doch zuvor mussen wir wieder ein wenig Mathematik berreiben. Den angenommenen Last fall zeigt Bild 4-3 1. Dabe i handel! es sich um einen einseitig eingespannten Trager. mit einer Streckenlast fiber die ganze Lange (z. B. Eigengew icht) und einer Punktlast am Ende.

F Q = q ·1 M (x l (

-, x

Hild 4-3 1 Einscitig cin gcsp anntcr Trager mit Pnnkt- un d Strcckcnlast

q(1- x)

2&4

4 Objektonentiert e Programrmerung

Das Biegemoment an der Stelle x bestimmt sich nach Darstellung aus

(4.4)

( 1-' ) M ( x ) = F(1- x) + Q(I - x ):

\ 2

DUTch Einsetzen in die allgemeine Gleichung der elastischen Lime , M (x } y =---

(4.5)

EI

ergibt sich y' =

- -!..(F(I- x) + ~ (1 - X)!). EI

(4 .6)

2

Eine Integration fiihn auf di e G jeichung der Balkenn eigung

, I(

F1

q lq ,

y =- Flx - -x + -q h, ,,- - Ix + -x +c E1 2 2 26 -

)

(4.7)

mit der Randbedingung y'( x = 0) = 0 folgt cl = O. Eine noch malige Integration fiihrt auf die G leicb ung der Durchbiegung

y=- -

1(F F)+-q 1 x - Ix - -x t

1

EI 2

6

4

1

- -q Ix) +q- , 4 +c

6

24

mil der Ranobed ingung y(x = 0) = 0 folgt auch ci

)

(H)

2

=0 .

Fur unseren Algorithmu s erha lten wir die beiden G leicbungen (4.9) und

(4.iO)

in denen die Lau fvariable x n U T im Quotienten auf'tritt. Nun sind wir auc h in der Lege unsere Klasse Lastfall zu deflnieren.

Lit._lrall t Hczcichnung t Punkllao;l

t Strcc kcnlast t .\1umenl(1.7.) t Durchbiegungt f.z)

Traeger

.\1alcrial

t TNarne : c har

f--.-o

t Breite : double t lloe he: double t Laen ge: double t

}:T~fomen1()

Sli d ....32 Die Klassc Lastfall erbt von den andcrcn Klassen.

f--.-o

.\ 1aIName: c har t E.\1od ul: duuble t Qu erZilhl: double

t

t S.\1od ul

o

4.5 Virtue lle Funktionen

285

Dies e Ktasse Lastfall hat euuer der Bezeic hnung die Punktlast und d ie Sueckenlasr. Die Me thoden ste llen die Auswertun gen dar. Cod e ~ -60 P ic Klasse Last fall

1* La 5 tf all.h De f i n i tion der Kl a s se Lastfall "/ c l ass La 5tf all

public Tra eger

I

public : 1* At t r i b u t e *1 c h a r Bezeichnung (2 0) ; 1* bel astende Ei n %e lkraf t in kN *1 d ouble Punktla5t ; d ouble St r eck e n l as t; 1* g esamte S t rec kenla st in kN *1

1* Meth oden *1 }

,

d ouble Mome n t (doubl e I . d oubl e %1 ; d ouble Durchbiequng (doubl e I . d oubl e %1 ;

Cud I.' " -61 P ie ML'1. hotlen do..... Klasse Lastfall

1* La5t fall. c c Me t h oden d e r Klas se La s t f all "/ /" F'u nkti on : Moment Bi egemoment in kNm an d er St e l l e x Ou t p u t: I ; F I ~che n t r~ghei tsmomen t i n crn A 4 I nput : % ; Qu o t ien t v o n x II "/ d ouble Las t fa l l:: Momen t

I

d o uble d ouble d ouble do uble

F Q E L

, , ,

(double I . d o ub le %)

Punktlast ; / " Ein%elkraft in kN St r eck e n l a s t ; / " gesamte S t r ecke n l a s t i n kN EModul ; / " Elastizit~t smodul in kN /nun" 2 Laenge; / " Trager lange in mm

"/ "/ "/

"/

r eturn L / 2 * (1 -z ) * (2 *F'+Q* (1 -z } } /IOOO; /" F'unkt i o n : Durchbieg u n g Out p u t : Dur c hbiegung in mm an der S t elle x I ; F I ~ chen tr ~ ghei tsmoment in cm " 4 Input : % ; Qu o t i ent v on x II "/ d ouble La stf all : : Durc hbiegung (d oubl e I . d ouble %)

I

d ouble F' d o uble Q

Pu n ktlas t ; 1* Einzelkraft i n kN S t r eck e n l as t; 1* gesamte St r eck e n l as t in kN

"/ "/

4 Objektonentierte Programrmerung

2' 6

1* Elastizitatsmodul i n kN/mmA2 1* Tragerlange in mm

d ouble E " EModul; d ouble L " Laenge ;

double xl ,x2 ,x3.x4 ;

"'"'

xl " 3 * Z * 2- 2 * 2 * 2;

x2 6*2*2 -4*2*2*2+2*Z*2*2 ; x) 4*F*xl+Q*x2 ; x4 " L"L*L*x3 / (24*E*t *1 0000 ): return x4 ;

Das nacbfolgende Programm bestimmt Durchbiegung und :\Iomenle n\'er lau f rur einen spez iellen Lastfall. Cod e .&-62 Bestimmung von Durchbiegung und Momentenverlauf flrr emcn Hcispiel-Lastfall

'* Demop rog r amm zur Klas se Last fall w stfall .cpp

"'

'include 'include "Ma t e r i a l . h" .include "Ma t e r i a l . c e · .include "Traege r . h" 'include "Tr a ege r .ce· 'include "Last f a l l. h" 'include "Las t f a l l .cc·

,

i nt main () II Oeklarationen

double x , Z , t , d , Hi Lastfall Ll ;

FILE · p u f f e r ;

puffer

= f open (" C: \ \Temp \ \ Biegung.dat " , "w");

II Instanzierungen

s t rcpy( L1 . TNarne, "Que r t r a e g e r " ) ; L1.Breite = 20; L1.Hoehe 12 0 ; L1.Laenge 1200; s t r c py lL1 .Ma t Narne , "Stahl"}; L1 .EModu l = 210; L1 . Que r Zah l = 0 . 3 ; L1 . Punk t l a s t = 1.4; L1. St reckenlast = 0 . 6;

= =

I I Ausgabe cou t « cou t « cou t « cou t «

"Berec hnu ng : " « endl; "Tr a ege r = " « Ll .TName « endl ; "\ t Ma t e r i a l = " « Ll .Mat Name « endl ; -\ tSchub- Modu l = " « Ll . SModu l {) « • kN /mm A 2 " « 1 = L1 .FTMornent ( ) ; cou t « - \ t FTMorne n t « I « " cmA 4- « endl ;

=-

endl ;

4.5 Virtue lle Fun ktio nen c cuc «

287

endl ;

f or ( x:O ; x< : Ll. La e n g e ; x : x +lO) (

z x /Ll .Laenge ; Ll .Durchbiegung (I ,z ) ; d H : Ll .Homent (I ,z l ; cou t « ·x :: • « X « "\ t d :



«

d «

"\ tH ::

- «

H «

endl; fprintf (p u ff e r .

" %6 . Of\ t %2 . 4f \t%3. 3 f\ n- , x, d ,H ) ;

}

fprintf (p u ff e r, "\n "); s ys t em(" Pa use") ;

Das Ergebnis lasst sich in Listenform und grafi sch darstellen.

, •.s

e.s

+----c

Hild 4·.1.1 Des Ergcbei s des Tcstbc ispie!s

Uhu ngc n Erstellen Sie llir den gleic hen Lastfall weitere Beis piele. Erstellen Sie danach ande re Lastfalle

wie r, B. flir einen beidseiug aurliege nden Trager und berechnen Sie zuslHzlich d ie Spannunge n.

288

4 Objektonentierte Programmierung

4.6 St rea ms Das Konzept In C++ ist ein Strom (e ngl. stream) eine Folge von Bytes. d ie \'o n einer Quelle zu einem lid transporti ert werden. wir sprecben auch von Darensrrom . Operator » Zid DDD ... DD D ll~~

Quellc

Bytes

BUd 4.34 Ein Stream

Streams benougen vom Konzept her weder ein Gerar noch eme Daiei. da sie im Spe icher verwalter werden. Die Untersc beidung, welc hes das l id des Stroms ist. wird durch die Klasse des verwe ndeten Obje ktes festgelegt. Die benorigten Benutzerschninstellen beli nden sich in den entsprechenden Headerfi les. Aile ~1 0gl ichkeiten dec I!O- Bibliotheken vorzusrellen. wurde den Rahmen dieses S uches nbersreigen. Ich konzentriere mich auf d ie Details. d ie fllr das allgemeine Arbeiten mit Strea ms wicbng sind. In fast allen Progra mmbeispid en wurden bereits Standardkana le filr die Em- und Ausgabe verwender. In diesem Kapitel wird deren Struknrr erla urerr. ios bao;c ba._ic sos-o-

.4

basic isrream-c-

I basic

jostreame>~

~ bas ic_os lrcam

bas ic itstreamc>

I-

WI

basic tsrreamc>

ba., ic filebu t

nasic orstrca m-c> basic istrin stream-c> basic srn nestreum-c-

basic stringbufc>

ba sic o srnn ustrcam -c-

basic- streambufe>

Bild 4-] 5 Hierarchic dc r fund amc ntalcn Stream-Klassen

Die Basisklasse ;OJ_ba.H> definiert die Eigenschaften alter Strearnklasse n. d ie unabhllngig vom Zeichentyp sind. Es hand elt sich dabe i im Wesemlic hen urn Komponemen und Funkuonen fU r Format- und Status-Flags.

4.0 Streams

289

Das Klassen-Templa te hCl.~ ic_i(J.~< > wird entsprechend dem Klassendiagramm in Bild 4-35 von ios_ha.'·e abgeleitet und definiert die generellen Eigenscha flen aller Strearnktessen. die vom Zejchentyp abhangig sind. Dazu gehort auch die Definition der Puffer. die von den Streams verwender werden. Ein solcher Puffer ist ein Objekt eine r von der Klasse ba.~ic_strellln hl~f< > abgeleiteten Klasse. Sie dient zum eigentlichen Einlesen und Ausgeben der einzelnen Zeichen. Die anderen Stream-Klassen sind ffu die Formatierung der Daten zustandig. Die Klassen-Templates I/(nic_istream und basicostreom c > definieren Dbjekte, die zum Einlesen und Ausgeben verwendet werden. Die meisrens verwenderen Klassen istream und ostream sind die dazugeborigen lnstanzierungen fUr den Datentyp char. Sie wurden vielfach in den Anwendung sbei spielen ein gesetzt. Des Klas sen -Template haficjo.ftream definien Objek te . die sowoh l zum Einlesen als auch zum Ausgeben verwendet werden .

Filr den Zugriff auf Strings und Dateie n we rden zusatzlicbe Klassen definiert, die in den nachfotgenden Kapiteln besc hrieben we rden . Die nachfotgende Tabe lle zeigt d ie globalen Objekte der beschriebenen Klassen . T ab tll r 4-2 Globale Objekte dcr Standard 1'0

Symbol

Datentyp

Standard -

"n

lsrream

Eingabekanal {Tastatur]

'include < iaman i p> ' in clude 3 .1> 4 1323. .. 3 128" .71 12 58 121f. .22 11 84. 21 1 153.8'> 11 2 '> 111'97.56 IIJ71. 43 IIMI> ... I 182 2 . 7 3

...". ...." '" ".

92:e .7 95 9 . 4 98 9 . 1 1 ll89 .8 liIl 9 .'> IAr. 9. 2 1 11'9 8 .9 1128 . 1> 1158 .3 11 8 8 12 17 .7 12 47 . 4 12 77 .1 1 3". 8 I lJ6.5 1 31>b. 2

...

,

9·18 .2b l 9 5 7.44 7 937 .5 9 18 .367

' "M

..

139'> .~

142S .1> 145S .3 148S 151 4 .7 1544.4 1 574.1 11>11 3. 8 Ib lJ.S 1f. 63. 2 11.92: . 9 1722 . 6 1?S 2. 3

'" ,'" '"

". ". ". ". ". ". ". '" '" ". ,

. 3'>3 . 38 5 "~ ,

8ll .H3 818 .182 8 93 .5'l1 789. 4 7 4 77S .81>2 7'62 .712

,~

..

rvaa

"" 5 .8"

737 . 78S

n

'"

1 811 . 7 1 8 4 1.4 1 8 71 .1 1989. 8 1 93 9 . 5

'l14. 2 81> 7113 .1 2 '>

r.5 11

2 6~8 .85

2 6 39. 62 258'1 .8 25 42 .5 25 82 .'1 7 2 468 . S7 2 438.74 2 41J . 82 23'1 1 2372 .3 1 23S I>.1>5 2 l43.74 211J.33 2325.21 2319.2 2 315 .12 2 H2 .81 2 312 .15 2313 231S . 2 b 23 18 .83 2323 .61 2329.53 2336 . S 234 4 . 4 6 23'>3 .3S 23b3. 1 23?l .I>'1 238'> 2397 . 9S 2 4 99.78 2 423 .16 2 437.13 24 51. 1> 8 2 46 b . 'n 2 482 .37 2 498. 4 b 251S. 8 1 2532 25 49. 4 251>7.21 2585 .39 2 1>1IJ. '13 2 622 .8 1

vva .a

17311.77 11.66. 1.7 11.87 . 1 4 1 5 5 i. n

'"M

3 11 H . 6 2'13 2. 72 28 44 2 %6. 56

1> 92. 3~

j

.1IHb

2 .'1l2n

2.8 4 4 2. %6 56 2 . 698 85 2. 639 62 2 .58'18 2 .5 425 2.5 82 '1" 2. 4b8!'1 2 . 438'14 2. 413 112 2.391

2.rnJl

2.35" " 2.34rl 4 2 .3HH 2 .3252 . 2.3 192 2.11'>12 2.1128 1 2 .H21'> 2.H3 a . H'>2 1> a . H883 a . 12 3bl 2 .329'>3 2 .3365 2.34 4 41. 2.3'>H'> 2. 31>J1 2.3731>7 2 .385 2 .3'1'''''' 2. 4!t9·18 2. 42 H6 2 . 4371J 2 . 45168 2 . 4"77 2. 48237 2. 498 46 2."15 111 2. !,J2 2 .5 49 4 2 .S6721 2.58 "39 2 . 6 113'13 2 . 1>228 1

lIild " ~ K D ie Ergcbnisdaten des Testbcis picls

. ., \

.~

---

/"

/"

'V"

/"

~

' 00

e

,

......-



'00

."

. 00

IIUd " ~9 Die Ergcbnisdatcn des Testbcispicl s in grafischer f orm

Uhu ng s\'orsc h lllg - O pti ma lc Bcst cllm cngc Ein at mticbes Problem wie d ie Bestimmung der optimalen Losgrone isr d ie Bestimmung der optimalen Besrellmenge. Auch bei die sem Problem gibt es gege nlauf ige Kosrenemwickl ungen.

30K

4 Objektonent ien e Programrmerung

Zu den bestellfixen Kosten zahlen d ie Kosten, d ie bei der Angebotseinholung und -prufung anfa llen. Urn d iese megfichst klein zu halten, wa rden grofe Bestellm engen sinnvoll sein. Andererseits werden demit die schon beschnebenen Lagerhaltu ngs- und Bankzinsen heb er. Auch hier gill es bestellfixe Kosten und Lagerhahungskosten so zu wahlen. dass diese ein Minimum werde n Die so gewonnene Menge ist die optimale Bestel lmenge. In der Literatur linden Sie die Form eln und Algorithmen.

Gesaml5tfJddwsten

SbJdaahl It i ld .a.. ~

S'OCKKostcn in Abhblgip;eil von der Besteumcnge

Eme weirere. oft angewa ndte Berec bnung, ist die Break-Even-Analyse. Diese ~1 elhod e ermitten die Absa rzmenge. bei der d ie Umsatzerlose die flxen und variablen Kosten decken. Die Break-Even-Methode zeigt die Wirkung von Umsatz- und Kosrenanderun gen auf den Gewinn.

Gesa mtkosten

variabll! ""::::~.L_...l.~_""=-

~

FilCkosten

StUdaa hl

Kild 4· !'1 Kosten und Erlelsc in A bhn ngig kcit von dc r Bcstcllmcngc

Es gib t den mengenmnaigen B· E·P:

- L J'lxkoslcll Dcc kungsbc urag je Steck

' I":\'cn-I'01l11 = rca,,"

(4.15)

und den wenmauigen B· E-P:

.'

L Fi",koslc n Dcc kungsqco te I je Suck

Break-Even -Point = - -

(4 . 16)

4.7 Ein- und Ausgabe von Strings

309

Darin ist der Deckungsbeitrag j e Stuck der Verkaufspreis je SHick - variable Kosten und d ie Deckungsquote j e StUc k der Deckungsbeitr ag j e Stuc k I v erkaufspreis j e SHick. Erstellen Sie ein entsprecbendes Programm (j b u n g!i\·o ~ch l ag - Chi-Qua drat

Die statistische Methode des Chi-Quad rats prufi die Kornpatibiluat zwischen beobachteten und erwarteten bzw . rbeoretiscb en Haufi gkeit en . Betra chten wir dazu den uns allen bekennren Zufallsgenerator. den Warfel. Wenn wir btl-mal ....-arfetn. dann erw arten wir dass j eder Wert der 6 Placben IO-ma l erscheint. Das tatsachli che Ergebnis difTeriert naiurhch von der Theone. ~i t ­ tets Chi-Qua dra nest konnen wir die Feststellu ng treffen. ob das becbechrere und lias erwanete Resultar so we it auseinander liegen . dass der Wiirfel als schlec ht anzu sehen ist. Chi-Quadra t ist wie folgt definien : (4.17) Darin ist 0 die beob act nete und E die erwarte te Hsufigkeir. Statistiker haben ennitte lt unter we lchem Wert Chi-Quadrat liege n muss. damit mil eine r 95o/rr-igen w ah rschemhchken d ie Ergebnisse ubere instimmen. Die Forme l lasst sich noch mit der umstritten en Yares-Korre kmr abandem in (4.18)

Schreiben Sie ein Programm, lias mit d ieser Forme! (mil und ohne Yates ] den C bi-Quadratwen bestimmt und testen Sie das Progra mm m it Beispieldat en.

310

4 Obj ektonentiert e Prog ramrmerung

4.8 St rea ms und Dateien Eine wenere Anwendc ngsm oghchke it fUr Streams sind Dateien. Etwa. urn Daten zu sichem bzw . urn sic rur ei n andere s Programm od er eine ander e Punkuon verfljgbar zu mec hen. Eben so wird man oft die be notigren Daten nic ht nber die Tastatur ei ngeben . sondem aus einer ext ernen Darei einlesen wo llen. In C++ steben bierfur vordefinie rte Klassen zur Verfii gun g. Urn d iese Klassen ruTdie Dateieinbzw . -ausgabe benutzen zu konnen . muss ein e zusatzliche Dekl aratio nsd arei ein gebu nden werden.

[

u sing n amespace s t d;

,

i n t mai n ( I

o f s t r e am Fi l e Name ;

,

Fil eN~ . open

(-c: / temp / t e s t . dn t"';

i f (I Fi l e Name)

II Fehlerbehandlung

Die jf-Abfrage kann sowohl bei Tex t- wie auc h bet Binardat eien eingesetzt werden, nac hdem cine Darei m il eine m Strea m-Objekt ..-erbunden wurde.

Verbindung mit Dal d 16\en Nac bdem di e Bearbeit ung der Date i abgeschloss en i SI. mus s die Verbind ung des Streams ZUT Datei auc h wied er autgeboben werde n. Hierbei gibt es eben falls zwei ve rschiede ne Verfahren. 1m ers ten Fall wild die Verbindung ZUT Datei ein fach durch den Aufruf deT

~l elhod e

au fgeho-

ben.

Beispiel : Aulheben ein er Dateiv·erbind ung

I v oid

o f stream : : c losell;

Das Stream -Obj ekt besteht da nach weiter und kann min els opell( ...) erne weue re Darei mil de m gleic ben Stream-Obj ekt ve rbinden. Be ispiel : Em eute Verbindu ng zu eine r Datei nach eine r Au lhebun g . inc l u d e < fs t r e am> using names pace s t d ; i n t main ( ) {

o f s tream FileName; Fi leName .open ("C :/ t e mp/ t est . d a tnl ; Fi l eName . c l o s e ( } ; II St r eam erneu t mit e i ne r Da te i v erbind en Fi leName. open { . . . ) ;

Die zwe ite ~ 6gl ichk eit besteht darin, lias Siream-Objekt einfach zu 'zersteren', Wird ein Stream-Objekt (wi e im nachfolgenden Beispiel) innerhalb eine s Bloc ks definiert , so kann zu nachst d ie Dater bei der Defi nition des Stream-Objekts mil dies em verbunden werde n. Wird am Blockende lias Stream-Objek t dann ungultig (ze rslOr1). so wird autornat isch die Verbindung zur Datei aufge hobe n.

4.8 Streams und Dateien

3 15

Beispiel: Aufbebung einer Verbindung durch Zer stcrung ' i n c l u d e < fs t r eam> u s ing n amespace s t d; int mai n ( ) {

II Blockbeginn o f stream FileName(

·c: /temp/test.dat~ J ;

II Blockende . St r e am-Ob j e k t wi r d gelOs chtl

Scbret ben in erne T n ld at ei Das Schreiben in eine Textdatei erfolgt prinzipiell gleich wie die Ausgabe auf di e Standardeusgabe mil CO I/t . Anstelle des Stream-Obj ekts COld Sieh l hier dann ledig fich der Name des Dateistream-Objekrs. Vnd aile 1:1.I schreibenden Dalen werden durch den Operator < in den Stre am nbe rtragen. Beirn Schreiben von Daten ist zu beachten, dass d iese durch ein Trennzeichen (Leerze ichen. Zeilen vorsch ub o. A.) voneina nder getrennt sind. da sie sonst nachher nicht mehr eingelesen werden kcnnen. Dadurc h. dass sow obt COld wie auch ofttream d ie gleiche Bas iskjasse ba.fic_O.flTeam bes itzen. stehen fur die Date iausgabe auch die gleichen Marupulatoren. wie ,,_B. hex. 5et" 1...) oder setp r ed.fioll(... ). :lUI verfugung. Beispiel: Schreib en in eine Textdate i l i n c l u d e < fs t r e am> u sing namespace s t d; int 5 1 = 10 . 5 2 = 2 0; i nt ma i n ( ) {

o f s t r e am Fi leName; Fil eName . o pen ( "c : / temp /te5t.dat - j; II We n n St r e am o h n e Fehle r mit Datei v erbunde n i f ( Fil eName) {

II Daten 5ch r e i ben 51 « ' 5etw(S) « II Da t e i 5ch l ie55en

Fil eName « Fil eName «

52 «

endl;

FileName. clo5e();

Seh rcl beu in elne Hiniird at d Sellen numerische Dalen binar in einer Datei abgelegt werden. so rnussen beim verbinden de r Datei mit den Stream-O bjekt d ie Modi ios.so nt I ios--b inary angeben werden. Ferner sollt e da mn gerlach! we rden. dass Binardateien nicht fllr den Datenaustausch zwischen unterschiedli chen Plauform en benutzt werde n dar fen. Dies gilt soger aueh Hir Programme die au f der gleichen Plattform laufen. ebe r mit unterschied lichen Compilem erstellt wur den.

316

4 Objektonent ierte Programrmerung

Beispiel: Methode zum Schreiben eines einzelnen Byles data

1 o s t r e am& put (c h a r da t .. l ; Selle n Dalen die aus mebreren Byles besteben (short. long usw.) in einer binaren Datei abgelegt werden. so wild hier fbr d ie Method e "Tire eingese tzt. Be ispiel : Me thode rom Schreiben mehrerer Bytes ost r e am& wr ite (cons t c ha r *pBuffe r . s t reamsize bytes } ;

pBI!ffer is! ein const char-Zeiger auf den Beginn des Datenblocks. der in die Datei geschrieben werden soli und bytes gibt d ie Anzah l der zu sc hreibend en Bytes an. Da die Methode einen consr cbar -Zeiger erwartei. muss in der Regel eine Typkonvertierung vorgenornmen werden . wenn numerische Daten abges peicbert werden (s iehe Beispiel) . Ohn e Typkonvertierun g erfolgt vom Comp iler eine Fehlermddung. Beispiel : Methode rum Schrei ben nume rischer Daten l i nclude using name space std ; i n t sl = 1 0, 52 = 20 ; i nt main ( I

,

o f s t r e am Fi l eName ;

FileName. open ( ~ c :/ t emp/ t e s t _ da t · . i os ; ; ou t lio s : : b ina ry ) ; II Wenn St r e am ohn e Fe h l e r mit Datei verbunden if ( F i l eName)

,

II Dat e n schr e i ben Fi l eName .wr ite (reinterpret_ cast (&sl ) , s i zeo f(s l)) ; FileName.wr i te( r e i n t e rpr e t _cast (& s2), s i zeo f(s 2)) ; II Oa t ei s c h l i e s s e n F i l eName . cl o s e () ;

In dem Beispiel erfolgt nur eme Typkonvertierun g in char" und nich r in COII.~' char" , Ein char" kann nberall anstelle eines cons ! cha r" nbergeben werde n, abe r r ucht urngekehrt! Das COliS ! char " bei der Signatur der Methode write sagt nur aus, dass die Methode den lnhah des abe rgebe nden Puffers nic ht verandert. Beim Schreiben von Dalen in Binardateien konnen die Daten unmiuelbar hintereinander geschriebe n werden . d. h. es sind keine Trennzeichen wie bet einer Textdatei notwend ig. Eingabl' strl,'am .(}bjl,'kl dcflm er cn Ein Eingabestream -Objekt wird mil folgender Anweisung definiert :

S)T1t3X: Eingabestream-Objekt

I if stre arn F i l eName ;

4.8 Streams und Dateien

3 17

itstream isl wiede r der Stream. der flir die Dateieingabe zustandig ist und f ileName ist de r (beliebige} Name des Stream-Objekts. Das so deflniert e Strearn-Obiekt fileN ame besitzt aber ebenfalls noch keine Zuo rdnu ng zu irgendeiner Datei.

Yer blndung mil Dat cl hersrenen Nach dem das Stream-Objekt ersrellt ist, kann es m il eine r Darer verbu nden wer den. Beispiel: Verbinden mit einer Datei

v o id istream : :open(con s t c ha r · p FName , i os: : openmode mode=ios : : i n); Der erste Param eter pFName ist der char-Zeiger au f den Namen der III o lTnenden Datei und der zweite Parameter mod e gibt an, wie d ie Datei zu olTnen ist. Er kann hier eine smnvolle Kombina tion aus folge nde n Werten sein : T a brllr ~ -9 Modi z urn Orrnen von Daieien ~f odu s

Bedeutung

10 S::IO

O n nen einer Datei zu m Lesen

ios::bin ary

Offnen einer binaren Datei

Beim Au fruf der ~1 ethode kann auch der zweit e Para meter weggelassen werde n: in diesem Fall wird die Darei rur die Eingabe im Textmodus geoffne t. Auch hier bestet ud ie :\toglichk eil. einen Eingabesueam gleich bei seiner Definition mit eine r Darei III verbinden . Beisp iel: Defi nition eines Eingabestreams m il Datei- verbmdung

ifstr eam myFile (c ons t c h a r · p FName,

i o s : : ope nmode mode

Sehen w ir uns beide :\1ogl ichkeiten nun anha nd eines ein fachen Beispiels an. 1. :\t oglichkei l Bingabe stream-Date i off nen

' i nc l ude < fs tream> us i ng name s pac e s t d; i n t ma in ( ) {

i f s t r e am File Name; Fi l e Name . open (" C: / t emp/ t e s t . da t "l ; i f ( ! File Name ) II Fe h l e r beha nd l u ng

2. :\toglichkeit Eingabestrearn-Datei offnen

I

' i nc l ud e u sin9 n amespa c e s t d ;

= i os::in );

318

4 Obj ektonentiert e Programrmerung

l n t mai n { I (

i f stream Fi leName ( "c :/ t e mp/ t e s t . d a t - ,

i o s : :in lios " binary) ;

i f (! F ileName l II Fehlerbehandlung

1m erste n Fall wird zunachst lias Strearn-Obj ekt defi niert und dann durch open mit einer Dater "munden. 1m zweiten Fa ll wi rd das Strea m-Obj ekt be i seiner Definiti on gleich mil einer Datei verbunden. 1m Beispiel wird die Datei im Btnarmodus geo ffne t. Zu beachten ist. da ss hier au ch der Mod us ;(J.~: :;" exphzit angegeben werden muss. Und auch da s ()jTnen einer Datei zu m Lesen kann natarlic h schief gehen . E. u sin g n ame s p a c e std; i nt s i , 52; i nt mai n ( ) (

i f stre am Fi l eName , Fi l e Name . op e n ("c ,/ t e mp/ t e s t . d a t II Hi e r Fe h l e r abfangen ! II Da t e n lese n File Name » 51 » s2 , II Datei 5chlie55e n File Name. c l o s e ( } ;

U

)

;

Dadurch, dass sowchl em 31s auch itstream die gleiche Basisklasse ha.fieJ\·rream besitzen, srehen Iltr die Daieie ingabe auch d ie gleic hen Manip ulatoren. wie v, B . hex od er oc t. zur Verfllgung. Lcscn 3US etncr Hinardald Selle n numer ische Daten au s einer Binardatei au sgelesen werde n. so mtlssen beim Verbi nden der Datei mil den Stream-O bj ekt di e Mod i ios.rin I ios::billory angebe n werden .

3 19

4.8 Stre am s und Da teien Bei spiel: Lesen eine s ein zelnen Bytes

I istream&

ge t lc h a r & da ta ) ;

Des gelesene Byte wi rd in der variablen data abgelegt . Zu beachten iSI. dass nach dem DatenIyp char der Op era tor & steht. Dies isl hier nic ht der Adressoperaror . sondem der Re rerenzoperarer . Das Prog ramm nbergibr berm Aufruf dieser Meihode die einzulesende Variable 'ganz nnrma l' :m di t' \-' t'lhOfIe, lll..n 7 . R Fil..N:lme ft'l(dm rV :IT);. Beisp iel: Aus tesen mebrerer Byles (s hort. long. etc.) is t ream& read (c ha r

~ p Buff e r .

str eamsi2e bytes ) ;

pBI{Ut'r ist ein char-Z eige r auf den Be gum des Darenblocks, in dern di e aus der Dare! ausgele-

senen Dalen abgelegt werden und bytes gibt die Anzahl der zu lesend en Bytes an. Da die Methode wiede rum eine n cber-Zeiger erwarte t. muss in der Regel erne Typkoevertie rung ve rwendet werden. wenn numerisch e Daten em zulesen sind. Beispiel: Einles en numeri sche r Daten ' inc l u d e us i ng n ames p a c e s t d; i o t a t , s 2; i nt main I ) {

i f st ream FileName ; FileN ame . open l - c: / t emp / t e s t . da t-, i o s::in l i o s : :bina ry } ; II Hier Fehler a b fangen ! II Daten l e s en F i l eName . r e a d ( r ei nt erpret _ca st < char~> (& sl l . s i 2eofls l » ; F i l eName . r e a d ( r e int erpret _ca st < char~ > (& s 2 1 . s i 2eofls2 » ; II Da te i s c h l iessen FileName . clo s e l ) ;

G leich7.eitiges Sc h rei he n und LeSCh Und auc h di es is! moglic b: Einen Da teistream zum g leicbzeit igen Lesen und Schreiben otfnen. Hierzu wird ein Stream -Objekt vom Ty p fs tream benorig t. Be ispiel: De Jinilion eines rstream-Obj ekt s [ f s t r e a m ( con s t c he r e pF."N ~a~m~.,,-,,-,i~n~t~m~o~d~.,,-,}C'C·

--.J

pFNlIme ist der Zeiger au f den Datemamen und mode gibt de n Modus an. in dem die Da tei geoff net werde n so li. Fttr den Mod us kann cine sinnvolle Kombinatio n der in der Tabulle 4-9 angegebenen werte ein gesetzt ....-erden: 'lahelle -1 -10 Modi ro m Orrncn

\' 011

Dateien zum gleichzeitigcn Lescn und Schrcibcn

Mod e

Bedeutung

rosr.m

Otfuen zu m Lesen

ios::out

Offnen ro m Schreibe n

320

4 Objektonentierte Programrmerung

ios.rbinary

Olfnen einer binaren Datei

ios::app

Neue Dalen werden immer an die Dater angehlingl.

ios::ate

Neue Daten werden an die Darer angehangt.

iost.tn mc

Bisheriger Dateiinhalt wird verworfen.

Zu beachten ist, dass der mode- Para meter hier immer angegebe n werden muss. w enn die Datei nur mil Lesezugriff ge6ffne t wird, muss sic: narurlich exisrieren. Der Umersc hied zwischen ios ::upp und ;O.f:: Ure wu rde scbon beim Ausgabesueam erfautert. Soli eine Datei zum Lesen und Schreiben geoffnet werden. d ie noch nicht existiert. so muss del :\.IOOe ios .stmnc mit angeben werden. Selbsrverstandlich konnen dann rom Beginn nur Dalen geschrieben werden. Aile dre i Streams (ofs tream, ifstream und ! ftreum ) besuzen eigentlich noch einen weiteren Parame ter, der den gleichzeiugen Zugriff auf eine Datei von mehreren Streams aus kontrolliert. Dieser Parame ter ist aber mehr rur fongeschnuene Dareioperauonen und wird deshalb hier nicht weiter betrachtet. So n~ l ig{'

Dasclop er atl onen

w enn Daten aus einer Datei eingelesen werden . muss sich auch feststellen lassen. ob aile Daten einget esen wurden und ob das Ende der Datei erre icht wurde. Auch dazu gibl es eine ~1 e­ thode. Beispiel: Methode zur Bestimmung. ob das Dateiende erreichr iSI

I bool

basic ios : : e o f O

Beispiel: Diese Methode liefert den Wert true. wenn das Dateiende erreicht ist if s t r e am FileName( · c: /temp /tes t .da t ") ; II Einlesen a us Da t e i FileName » da t a » . .. ; II PrU f e n , ob Dat eie nde noch n ich t erre i c h t if ( IFi l e Name , e o f ( » {

II Daten a us Datei a uswerten

Zu beachten iSI. dass weitere Einleseversuche danach zwar in der Regel mch t zu einem Programm absrurx fllhren. jedoch unguhige Dalen liefem. Demit e(~r aber das Erreichen des Dateiendes signalisieren kann. muss vorher ein Einleseversuch stauge funden haben. Die Dateistreams bieten noch d ie Moglichkeit , minds seek-Memberfunktionen d ie 'Dateizeiger' explizit zu beeintlusse n. Umlciten d er Sta nda rd-Ka nale Es besteht in C++ die- ~1 og l i c hk ei t . die Srandard-Kanale cin, emit , cerr oder clog

steuen .n mzuleuen''.

pro~'Tammge ­

4.8 Streams und Dateien

32 1

So kcnnen z. R aile Ausgaben start auf cout in eine Datei umgeleitet werden. Der Grund flir diese ~lOglie h k e i l der Zuweisung. die in den bisber genannten Stream-Klassen nicht vorbanden war. hegt daran. dass die vier eben genanruen Standard-Kanale in Wirklichkeit gar keme Objekre der Klassen os tream und istrea m sind. sondem Objekte der ebgeleheten Klassen istream _withassign und o.flream_withassign. Beispiel: Umleilung in eine Datei o f~ t r eam

datei ( "Umleitung.dat - , ios"app ) ;

cou t :: datei ; II cou t wi r d in die geof fnete Datei umgeleitet cou t « " Te x t a usg a be" ; II S t r i ng wird in Datei geschrieben

Man sothe jedoch beachren. dass das Objekt Darer als lckal es Objekt am Blockende automatisch geschlossen wird, Hal man [wie im Beispiel) c OllI umgeleitet. so wird mil dem Objekt Datei aueh cOll I geschlossen! Folgfich kann anschlieBend auf cout nicht mehr geschrieben werden. Oa dies im Allgemeinen nicht erwu nscbt sein dame. sollte man tbevor man die Umleitung vornim mn das aile Objekt in einer globalen Variablen zwischenzuspeichem. Beispiel: Alles Objekt sichem os t re~w i t hass i gn

s a v ecou t;

s a veCou t =cou t; cou t :: s e v eccu t .

II Umleiten und Ausgabe in eine Datei II cou t r e s taurieren

Nachdem aile Ausgaben in die umgeleuete Darei vorgenommen wurden, kann dann der Standardausgabekanal zuntckgesetzt werden.

322

5 Generische Programmierung 5. t Das Grundprinzip Generlscb (von 1a1. Genus. das Gesc hlecht oder die Genung beueffend) besc hreibt den Grad der Allgemc:ingultigkeil einer Lc sung. Je univers elle r eme Losung verwen dbar ist. urn so geneTischer is! sie. In der obje ktorien tierten Programmierung spiel! dieser Ansatz eine wichrige Rolle. Einzelne Funktionen und Klassen werden mog lichsi allgemein beschneben, so dass sie fur unterschiedhc be Datentypen nutzbar sind. Einige Programmiersprac hen unlerstiilzen dies d urch das Konzept Generischer Typen bzw . Temp lates. Ein generisches Modell muss in einer konkreten Anwendung immer an die spezl fiscben Gegebenheiren angepass t werden. so wie die generischen vorgehensrrodetle Wasser fall- ode r Spiralmode ll an ein konkreres Proje kt. Diese Anpassung wird im Bereich des SoftwareEngineering auch Tay loring genann r. Das Z iel der gene rischen Programmierung ist es, die Algoritbmen so wen wie roogtich von den Datenstrukturen, mil denen sie arbeiten, zu rrennen. Es werden ledighch bes timmre Anforderungen an die Typen gestellt. Ein gules und lmmer wieder gem geno mmenes Beispiel fUr unsere Betrachrung isl die Maximumfunktion, d ie flir Lwei gegebene Werl e a. b desselben Typs den grOBeren Wert max(a .b) zurtickgibt. Als Anforderungen flir diese Funkt ion gehen. dass a und b desselben Typs mileinander vergleicbbar sind. der Ausdruck a < b wohl definiert iSI und eine Ordn ung bescbreibt .

In klassischen Progra mmiersprachen wiirde man bier fur jeden Dareruyp eine Funkuo n programmie ren, die fl lr jeden Typ getrennl das GJeiche lui. Beispiel: HerkOmmliche Maxim umfun ktionen [ilr int- und Iloet-Detentypen i n t maxi nt(int a , int b l ( (a < b l return bi else return a '

if

fl o a t max f l oat(float a, float b) (

i f (a < b) return bi el se return 8i

Hierbei falh auf, dass der Code an sich immer derse1be ist und slch nur die Type n unterscbeiden. Diese Wiederholung lassr sich bekanntennallen mit Makros umgehen.

5.1 Oas Grundprinzip

323

Beispiel: Die Maximurnflmktion als Makro

I.define

MAX'"

b)

« .) v oid s wa p ( X& 4 , X& b ) x t emp = a ; 4 = b; b = temp ;

II temp mit a ini tialisiert

t empl ate

v oid sor t

I T (&a) [v@ctor] )

(

f or lint i =O; Lcvect o r , ++i ) f o r lint j=i +1; j -cv e c t.or , ++j ) i f (a l j ] > al i] ) s wa p (al i], alj] ); i nt main () int i; int v 1 112 ] = {3, 9 , 4 , 2 , 8 , 8 , 1 , 7 ,5 ,ll ,lO ,6} ; fl o at v 2 16 ] = {0 . 4, 3.1, 5 . 4 , 6 .7, 0. 4, 0. 42}; s o rt (v1 ); sort (v 2 ); cou t « "v 1 : " « @ndl ; f o r (i=0;i< 12;i ++ ) c ou t « vl[ i] « endl ; cou t « "v 2 : " « e ndl; f o r (i= 0 ;i fI [4.3 J 247 time.h 11.4] 39 Token [ 1,2J II Tool sll .l ]1 Top- Down -Design (2, 1] 87 T ran,lalor [ 1.1) 2 Typ moJifizier-cr[ 1.3123

U Cberladrn " 011 FWlktionen 12.2]95 D lll2. l ]lUl t;mleilt'rl