Ich bin nicht sicher, wie man eine Funktion hat, die ein Klassenobjekt als Parameter erhält. Irgendeine Hilfe? Hier ist ein Beispiel unten.
#include<iostream>
void function(class object); //prototype
void function(class tempObject)
{
//do something with object
//use or change member variables
}
Im Grunde bin ich nur verwirrt, wie man eine Funktion erstellt, die ein Klassenobjekt als Parameter erhält, und dann diese Parameter innerhalb der Funktion wie tempObject.variable
verwendet.
Sorry, wenn das irgendwie verwirrend ist, bin ich relativ neu in C++.
class
ist ein Schlüsselwort, das nur * zur Einführung von Klassendefinitionen verwendet wird. Wenn Sie neue Klasseninstanzen entweder als lokale Objekte oder als Funktionsparameter deklarieren, verwenden Sie nur den Namen der Klasse (die im Gültigkeitsbereich liegen muss) und nicht das Schlüsselwort class
selbst.
z.B.
class ANewType
{
// ... details
};
Dies definiert einen neuen Typ namens ANewType
, bei dem es sich um einen Klassentyp handelt.
Sie können dies dann in Funktionsdeklarationen verwenden:
void function(ANewType object);
Sie können dann Objekte vom Typ ANewType
an die Funktion übergeben. Das Objekt wird in den Funktionsparameter kopiert in den Funktionsparameter. Wie bei den Basistypen wird bei jedem Versuch, den Parameter zu ändern, nur der Parameter in der Funktion geändert und das ursprünglich übergebene Objekt nicht beeinflusst.
Wenn Sie das Objekt außerhalb der Funktion ändern möchten, wie in den Kommentaren in Ihrem Funktionshauptteil angegeben, müssen Sie das Objekt als Referenz (oder als Zeiger) verwenden. Z.B.
void function(ANewType& object); // object passed by reference
Diese Syntax bedeutet, dass sich jede Verwendung von object
im Funktionskörper auf das tatsächliche Objekt bezieht, das an die Funktion übergeben wurde, und keine Kopie. Alle Änderungen ändern dieses Objekt und werden sichtbar, sobald die Funktion abgeschlossen ist.
[* Das Schlüsselwort class
wird auch in Vorlagendefinitionen verwendet. Dies ist jedoch ein anderes Thema.]
Am einfachsten:
#include <iostream>
using namespace std;
class A {
public:
A( int x ) : n( x ){}
void print() { cout << n << endl; }
private:
int n;
};
void func( A p ) {
p.print();
}
int main () {
A a;
func ( a );
}
Natürlich sollten Sie wahrscheinlich Referenzen verwenden, um das Objekt zu übergeben.
Wenn Sie Klasse Instanzen (Objekte) übergeben möchten, verwenden Sie entweder
void function(const MyClass& object){
// do something with object
}
oder
void process(MyClass& object_to_be_changed){
// change member variables
}
Andererseits, wenn Sie die Klasse selbst "übergeben" möchten
template<class AnyClass>
void function_taking_class(){
// use static functions of AnyClass
AnyClass::count_instances();
// or create an object of AnyClass and use it
AnyClass object;
object.member = value;
}
// call it as
function_taking_class<MyClass>();
// or
function_taking_class<MyStruct>();
mit
class MyClass{
int member;
//...
};
MyClass object1;
Ich habe das gleiche auch gefragt. Eine andere Lösung ist, dass Sie Ihre Methode überladen könnten:
void remove_id(EmployeeClass);
void remove_id(ProductClass);
void remove_id(DepartmentClass);
in dem Aufruf passt das Argument entsprechend dem Objekt, das Sie übergeben. Aber dann müssen Sie sich wiederholen
void remove_id(EmployeeClass _obj) {
int saveId = _obj->id;
...
};
void remove_id(ProductClass _obj) {
int saveId = _obj->id;
...
};
void remove_id(DepartmentClass _obj) {
int saveId = _obj->id;
...
};