004
11.05.2022, 00:16 Uhr
Data2006
|
Hallo.
Vielen Dank für die Hilfe. Es klappt jetzt.
Klar ich habe ne alte Lernunterlage. Wollte auch nur mal durchgehen ob ich C++ jetzt kapiere. Da gab es Verständnisprobleme (bei dem Klassenkonzept, Vererbung, Mehrfachvererbung, Inline-Funktionen usw.) Ich denke ich werde bald abbrechen.
Noch paar Fragen habe ich noch. Wollte mir bischen den Quelltext von setw(), cout, cin, showpoint angucken. Per Suche über Windows Explorer finde ich die aber nicht. Auch die Headerdatei iostream kann ich nicht finden. Wo verstecken die sich vor mir?
Wenn ich mit clog was ausgeben will, wird das vom Compiler direkt ausgegeben. Laut Lernunterlage wird erst ausgegeben wenn der Puffer voll ist oder flush; aufgerufen wird. Hat sich das auch geändert?
C++: |
#include <iostream>
#define MAX(a, b) ((a) > (b)? (a) : (b))
int main (void) { int i, x=39, y=45; i=MAX(x++, y++); std::cout << "MAX: " << i << "\tx: " << x << "\ty: " << y << std::endl; }
|
Warum ist hier a und im MAX in zusätzlichen ()? Laut Lernunterlage ist Ausgabe: MAX: 46 x: 40 y: 47 Mein Programm zeigt da was anderes an: MAX: 46 x: 40 y:47 Ich hätte das anders interpretiert: i=39 >45 ? 39:45. Und dann erst x++ und y++. Wo ist da mein Denkfehler? (Soll laut Unterlagen Seiteneffekte sein. Verstehe ich nicht.)
Dann gehts weiter mit Defaultwerte für Funktionsargumente:
C++: |
#include <iostream>
void funk(int=3, double=3.1415926535, char* ="Hallo");
int main(void) { funk(); funk(5); funk(6, 20.12); funk(11, 31.29, "Guten Tag"); }
void funk(int a, double b, char *c) { std::cout << "1. Argument: " << a << std::endl; std::cout << "2. Argument: " << b << std::endl; std::cout << "3. Argument: " << c << std::endl << std::endl; }
|
Das konnte ich schon mal umsetzen. Ich erhalte in Zeile 3 (void funk(int=3, double=3.1415926535, char* ="Hallo") eine Warnung:
Code: |
3 53 C:\Users\Heiko\Desktop\Unbenannt3.cpp [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
|
Ist da char* ="Hallo" falsch?
Bereichsauflösungsoperator:
C++: |
#include <iostream>
int zahl=141;
int main(void) { int zahl=366; std::cout << "Zahl global: " << ::zahl << std::endl; std::cout << "Zahl lokal: " << zahl << std::endl; }
|
Bei ::zahl wird die Variable außerhalb der Funktionen?! Sonst zahl in main()?! Was passiert, wenn ich ne for-Schleife auch mit zahl anlege:
C++: |
for (int zahl=1; zahl <=10; zahl++) { std::cout << zahl << std::endl;
|
Zu guter Letzt: Inline-Funktionen.
C++: |
#include <iostream>
inline int max(int a, int b) { return a>b ? a:b; }
int main(void) { int i, x=39, y=45; i=max(x++, y++); std::cout << "max: " << i << std::endl; std::cout << "x: " << x << std::endl; std::cout << "y: " << y << std::endl; }
|
Jetzt stimmts: i=45 x=40 und y=46. Wann nehme ich Makro, inline oder normale Funktion?
So, das wars erst mal für heute.
Vielen lieben Dank für Eure Antworten.
LG und gute Nacht, Heiko |