ich hab vor 15 Jahren das letzte Mal mit C++ programmiert. Und ich hab festgestellt, da hat sich einiges geändert. Move-Operatoren, etc...
Da ich jetzt wieder anfange mit C++ zu programmieren möchte ich mir nicht irgendwelchen Blödsinn angewöhnen. Daher würde ich jetzt einfach mal meine erste Klasse kurz posten und euch bitten einfach mal ganz unverblümt mich auf jedes "Ungünstig" hinzuweisen, dass sich vielleicht bei mir eingeschlichen hat. Auch der Hinweis, was man den so generell beachten müsste beim Entwurf von Klassen. Ja, ich weiß es gibt viele Tutorials im Internet, aber denen mangelt es zu 99% bei den "warum"-Fragen. Die sagen, was technisch geht, aber sehr selten auch, warum man was machen oder lassen sollte.
Hintergrund: Ich möchte mit eine Musik-Programm schreiben, in der Art "Alleinunterhalter". Meine erste Klasse ist die Verwaltung, wecher Akkord momentan aktiv ist. Die Idee ist, jeden möglichen Ton in einem Array zu speichern. Also der Ton "c" ist Array[0], "cis" ist Array[1], etc. Da es 12 Töne gibt, hab ich mich für einen array[12] entschieden.
Bei "C-Dur" soll dann die Funktion "getAsString()" ein "c e g" schreiben. Also den Array durchgehen und alle Aktiven Töne mit Leerzeichen getrennt hinschreiben.
Wird natürlich alles später noch ausgebaut.
Mir geht es unter anderem um die "Best Practises", sowie übliche Namenconventionen und "typische Arbeitsweisen".
Mein Endprogramm soll in c++/winrt geschrieben sein, da ich das XAML-Prinzip super finde und ich glaube, dort eine gute Performence zu haben.
Code: Alles auswählen
// .h
#pragma once
#include <array>
class alfMusicChord
{
private:
std::array<bool, 12> notes;
public:
alfMusicChord() noexcept;
alfMusicChord(const alfMusicChord& chord) noexcept;
alfMusicChord(alfMusicChord&& chord) noexcept;
alfMusicChord(winrt::hstring const& value) noexcept;
alfMusicChord& operator=(const alfMusicChord& chord) noexcept;
alfMusicChord& operator=(alfMusicChord&& chord) noexcept;
alfMusicChord& operator=(winrt::hstring const& value) noexcept;
void parseString(winrt::hstring const& value) noexcept;
winrt::hstring getAsString();
};
Code: Alles auswählen
// .cpp
#include "alfMusicChord.h"
alfMusicChord::alfMusicChord() noexcept
:notes({ false,false,false,false, false,false,false,false, false,false,false,false })
{
}
alfMusicChord::alfMusicChord(const alfMusicChord& chord) noexcept
:notes(chord.notes)
{
}
alfMusicChord::alfMusicChord(alfMusicChord&& chord) noexcept
:notes(std::move(chord.notes))
{
}
alfMusicChord::alfMusicChord(winrt::hstring const& value) noexcept
:notes({ false,false,false,false, false,false,false,false, false,false,false,false })
{
parseString(value);
}
alfMusicChord& alfMusicChord::operator=(const alfMusicChord& chord) noexcept
{
notes = chord.notes;
return *this;
}
alfMusicChord& alfMusicChord::operator=(alfMusicChord&& chord) noexcept
{
notes = std::move(chord.notes);
return *this;
}
alfMusicChord& alfMusicChord::operator=(winrt::hstring const& value) noexcept
{
parseString(value);
return *this;
}
void alfMusicChord::parseString(winrt::hstring const& /*value*/) noexcept
{
// TODO
}
winrt::hstring alfMusicChord::getAsString()
{
return winrt::hstring(L"ToDo"); // TODO
}