Ich schreibe gerade C-Code in C++ - Code um. Dabei ersetze ich structs
durch classes
. Das bedeutet, dass einige der Variablen von öffentlich zu privat gehen. Jetzt während der Übergangsphase möchte ich eine Fehlerüberprüfung durchführen, indem ich das Programm manchmal kompiliere und ausführe. So beabsichtigte ich, öffentliche und private Variablen gleichzeitig zu haben, die verbunden sind, d.h. wenn ich etwas in die private Variable schreibe, ändert sich auch die öffentliche Variable. Nichtsdestoweniger möchte ich nur in die privaten Variablen schreiben, indem ich separate Funktionen verwende, d. H. Die öffentlichen Variablen als schreibgeschützte Variablen haben. Mein aktueller Ansatz ist:Öffentliche und private Variablen verknüpfen (mit Schreibzugriff auf private Variablen)
#include <iostream>
#include <stdio.h>
class test_vec
{
private:
int x, y;
int data[2];
public:
int x_ext, y_ext;
int data_ext[2];
test_vec(int x, int y)
{
this->x = x;
this->y = y;
this->x_ext = this->x;
this->y_ext = this->y;
}
~test_vec()
{}
void set_x(int x)
{
this->x = x;
}
void set_y(int y)
{
this->y = y;
}
};
int main(void)
{
std::cout << "Hello World\n";
test_vec test(1, 2);
printf("test has the properties (%d, %d)\n", test.x_ext, test.y_ext);//So far, so good
test.set_x(4);
test.set_y(10);
printf("test has the properties (%d, %d)\n", test.x_ext, test.y_ext);//Not updated!
return 0;
}
Wie kann ich die Verknüpfungen zwischen den Variablen ändern? Im Moment habe ich bereits zwei ineinander kopierte Zeiger, aber wie kann ich die externe Variable auf die interne Variable "sperren"?
Da Sie Client-Code ändern müssen, um den neuen Namen trotzdem zu verwenden ('_ext' hinzufügen), warum ändern Sie es einfach nicht, um einen Getter zu verwenden? Das Speichern von Const-Referenzen macht Ihr Objekt größer und sieht ehrlich komisch aus. – Useless
Terminologie nitpick: Es macht keinen Sinn über "Strukturen mit Klassen zu ersetzen", da es keinen Unterschied zwischen "struct" und "class" gibt, außer dem Standardzugriff von Mitgliedern, und Sie machen das mit 'private:' als erste Zeile in Ihrer Klasse. – hyde
@Useless: Sie werden in einer endgültigen Bereinigung entfernt, aber bis dahin würde ich sie lieber haben, um das Programm während der Übergangsphase testen zu können. –