
135681
15.03.2018
C++ Modularisierung Frage
Hallo!
Ich hab eine Frage - undzwar möchte ich mein Programm modularisieren.... hier der Code:
___________________________________________________
dynamischeArrays.cpp
DynamischeArrays.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
Speicher für Eingabe während Laufzeit festlegen
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Header-Data.h"
using namespace std;
int main()
{
int groesse = 0;
string *dyn_array = 0; Zeiger auf einen String
cout << "Eingabe: Anzahl Teilnehmer..." << endl;
cin >> groesse;
dyn_array = new string[groesse]; Anfordern eines Datenfeldes bestehend aus string Werten mit der größe groesse und lass ihn auf dyn_aray zeigeng
einlesen(groesse, dyn_array);
ausgeben(groesse, dyn_array);
delete dyn_array; //Freigeben
return 0;
}
____________________________________________________________________________________________________
____________________________________________________________________________________________________
eingeben.cpp
#include <iostream>
#include <string>
void einlesen(int groesse, string *dyn_array)
{
for (int i = 0; i < groesse; i++)
{
cout << "Geben Sie die Namen (Nachnamen) ein." << endl;
cin >> dyn_array[i];
}
}
____________________________________________________________________________________________________
____________________________________________________________________________________________________
ausgeben.cpp
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;
void ausgeben(int groesse, string *dyn_array)
{
for (int i = 0; i < groesse; i++)
{
cout << dyn_array[i] << endl;
}
system("pause");
}
____________________________________________________________________________________________________
____________________________________________________________________________________________________
Header-Data.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
void einlesen(int, string *);
void ausgeben(int, string *);
____________________________________________________________________________________________________
____________________________________________________________________________________________________
____________________________________________________________________________________________________
____________________________________________________________________________________________________
Meine Frage: Generelle einwände von euch. Ich möchte eure kritik bzw. kommentar dazu hören... Sehr ihr Fehler?
Danke im Vorraus.
MfG
Ich hab eine Frage - undzwar möchte ich mein Programm modularisieren.... hier der Code:
___________________________________________________
dynamischeArrays.cpp
DynamischeArrays.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
Speicher für Eingabe während Laufzeit festlegen
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Header-Data.h"
using namespace std;
int main()
{
int groesse = 0;
string *dyn_array = 0; Zeiger auf einen String
cout << "Eingabe: Anzahl Teilnehmer..." << endl;
cin >> groesse;
dyn_array = new string[groesse]; Anfordern eines Datenfeldes bestehend aus string Werten mit der größe groesse und lass ihn auf dyn_aray zeigeng
einlesen(groesse, dyn_array);
ausgeben(groesse, dyn_array);
delete dyn_array; //Freigeben
return 0;
}
____________________________________________________________________________________________________
____________________________________________________________________________________________________
eingeben.cpp
#include <iostream>
#include <string>
void einlesen(int groesse, string *dyn_array)
{
for (int i = 0; i < groesse; i++)
{
cout << "Geben Sie die Namen (Nachnamen) ein." << endl;
cin >> dyn_array[i];
}
}
____________________________________________________________________________________________________
____________________________________________________________________________________________________
ausgeben.cpp
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;
void ausgeben(int groesse, string *dyn_array)
{
for (int i = 0; i < groesse; i++)
{
cout << dyn_array[i] << endl;
}
system("pause");
}
____________________________________________________________________________________________________
____________________________________________________________________________________________________
Header-Data.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
void einlesen(int, string *);
void ausgeben(int, string *);
____________________________________________________________________________________________________
____________________________________________________________________________________________________
____________________________________________________________________________________________________
____________________________________________________________________________________________________
Meine Frage: Generelle einwände von euch. Ich möchte eure kritik bzw. kommentar dazu hören... Sehr ihr Fehler?
Danke im Vorraus.
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 368254
Url: https://administrator.de/forum/c-modularisierung-frage-368254.html
Ausgedruckt am: 23.05.2025 um 16:05 Uhr
11 Kommentare
Neuester Kommentar
So etwas wie ein "Dynamisches Array" gibt es bereits mit automatischer Speicherverwaltung. Nennt sich std::vector und ist ein Klassentemplate aus dem vector Header. Sobald du new und delete in C++ benötigst, hast du im Zweifelsfall bereits etwas falsch gemacht.
http://www.cplusplus.com/reference/vector/vector/
In deinem Fall arbeitest du mit einem
Lass bitte dieses unsägliche
Steffen
http://www.cplusplus.com/reference/vector/vector/
In deinem Fall arbeitest du mit einem
std::vector<std::string>
Lass bitte dieses unsägliche
using namespace std;
weg. In einem Header ist das sowieso ein absolutes No-Go.Steffen
Der Sinn von einem Namensraum ist, dass Klassen und Funktionen in unterschiedlichen Namensräumen denselben Name haben dürfen, aber über den Namensraum eine eindeutige Zuordnung haben. Das wird insbesondere dann interessant, wenn du weitere Bibliotheken einbindest. In C++ wird bspw. gern mit den boost Headern gearbeitet. So gibt es unter anderem ein std::swap() und ein boost::swap().
Wenn du einen Header includierst, dann ist das so als würde dort wo dein #include in der Implementierung steht, der Quellcode deines Headers eingefügt werden. Steht ein using namespace in deinem Headercode, dann ist dieses automatisch im kompletten Code nach dem #include wirksam. Schon kommt es zu Nameclashes bei der Nutzung anderer Bibliotheken.
Außerdem willst du als Sprachbeginner auch erst mal lernen, was alles zum std-Namensraum gehört, oder?
Im Moment versuchst du irgendwie 1 zu 1 von C nach C++ zu übersetzen. So wird da aber kein vernünftiges C++ daraus. C++ ist eben nicht, dass statt der printf() Funktion nun der std::cout Stream verwendet wird. C und C++ sind zwei völlig unterschiedliche Sprachen mit völlig unterschiedlichen Programmierparadigmen.
Ich habe es dir mit dem obigen Beispielcode einfach gemacht, die Funktionen in separate Implementierungen auszulagern. In der Realität würde man das allerdings nicht tun. Es ist davon auszugehen, dass der Compiler bei der Optimierung ein Inlining vornimmt (der Funktionscode wird an der Stelle eingesetzt, wo der Funktionsaufruf steht). Die Auslagerung in weitere Implementierungen erschwert dieses Inlining, da jede Implementierung zunächst separat kompiliert wird, bevor der Linker die Codes verknüpft.
Steffen
Wenn du einen Header includierst, dann ist das so als würde dort wo dein #include in der Implementierung steht, der Quellcode deines Headers eingefügt werden. Steht ein using namespace in deinem Headercode, dann ist dieses automatisch im kompletten Code nach dem #include wirksam. Schon kommt es zu Nameclashes bei der Nutzung anderer Bibliotheken.
Außerdem willst du als Sprachbeginner auch erst mal lernen, was alles zum std-Namensraum gehört, oder?
Im Moment versuchst du irgendwie 1 zu 1 von C nach C++ zu übersetzen. So wird da aber kein vernünftiges C++ daraus. C++ ist eben nicht, dass statt der printf() Funktion nun der std::cout Stream verwendet wird. C und C++ sind zwei völlig unterschiedliche Sprachen mit völlig unterschiedlichen Programmierparadigmen.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <limits>
void einlesen(std::vector<std::string>& dyn_array);
void ausgeben(const std::vector<std::string>& dyn_array);
int main()
{
std::cout << "Eingabe: Anzahl Teilnehmer..." << std::endl;
std::size_t groesse{};
std::cin >> groesse;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::vector<std::string> dyn_array{ groesse };
std::cout << "\nGeben Sie die Namen (Nachnamen) ein." << std::endl;
einlesen(dyn_array);
std::cout << "\nAusgabe:" << std::endl;
ausgeben(dyn_array);
std::cout << "\nPress Enter to continue . . . " << std::flush;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return 0;
}
void einlesen(std::vector<std::string>& dyn_array)
{
std::for_each(dyn_array.begin(), dyn_array.end(), (auto& elem){ std::getline(std::cin, elem); });
}
void ausgeben(const std::vector<std::string>& dyn_array)
{
std::for_each(dyn_array.cbegin(), dyn_array.cend(), (const auto& elem){ std::cout << elem << std::endl; });
}
Steffen
Hehe, das hat ja nun weder mit C++ noch mit deinem Thema auch nur das geringste zu tun.
Was dein Yahoo Problem angeht, hilft mglw. AdwCleaner
https://de.malwarebytes.com/adwcleaner/
Ob du dir sonst noch irgendwelchen Mist eingefangen hast, kann ich kaum beantworten. Klingt aber so. Dort ist diese Frage aber auf jeden Fall besser aufgehoben ...
Steffen
Was dein Yahoo Problem angeht, hilft mglw. AdwCleaner
https://de.malwarebytes.com/adwcleaner/
Ob du dir sonst noch irgendwelchen Mist eingefangen hast, kann ich kaum beantworten. Klingt aber so. Dort ist diese Frage aber auf jeden Fall besser aufgehoben ...
Steffen