wake-up-neo.net

Wie verwendet man ein Klassenobjekt in C++ als Funktionsparameter?

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++.

26
James

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.]

33
CB Bailey

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.

10
anon

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;
5

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;
    ...
};
0
vincent thorpe