2016-05-26 11 views
3

Ich bin neu in der Programmierung und wir haben gerade angefangen zu lernen "Klassen". Ich werde Ihnen einen Beispielcode zeigen, den ich im Internet gefunden habe. Meine Frage ist - Sind "add" und "res" Konstruktoren und wie ist es möglich, dass ein Konstruktor einen Wert zurückgibt? "X res und X add" sind keine Methoden vom Typ int und es gibt immer noch einen Wert (es gibt nicht auch eine Variable für res), also bin ich wirklich verwirrt .. Ich habe in ein paar Posts in gesehen stackoverflow diese Konstruktoren können keinen Wert zurückgeben, aber was sind dann "X res und X add"?Methoden/Konstruktoren und ihre Rückgabewerte

#include <iostream> 
using namespace std; 

class X { 
    int a; 
    int b; 

public: 
    X (int a=7, int b=6) { 
     this->a = a; 
     this->b = b; 
    } 

    void print() { 
     cout << a << b; 
    } 

    X add() { 
     X res(a+b, a-b); 
     return res; 
    } 

}; 

int main() { 
    X x; 
    x.add().print(); 
    return 0; 
} 

Antwort

3

Sind "hinzufügen" und "res" Konstruktoren?

No. add() ist eine Elementfunktion der Klasse und gibt XX, res eine lokale Variable ist innerhalb add() mit Typ X.

Konstrukteuren

Ja ein Wert nicht zurückgeben kann, es richtig ist.

+0

Ich denke, ich habe es ... Und am Ende denke ich, dass die Antwort etwas wie - 'x.print ist(); 'wo' x' die Werte 13 und 1 enthält und mit der 'print();' Methode wir sie einfach ausdrucken? – specbk

+0

@specbk Ja, Ihr Verständnis ist richtig. – songyuanyao

2

sind „add“ und „res“ Konstrukteure und wie ist es möglich, dass ein Konstruktor einen Wert zurückgibt?

Keine add() ist eine „normale“ Klasse-Memberfunktion, und es gibt eine neue X Instanz namens res, dass der X(int, int) Konstruktor initialisiert wurde mit.

0

Ein Klassenkonstruktor ist eine spezielle Memberfunktion einer Klasse, die ausgeführt wird, wenn wir neue Objekte dieser Klasse erstellen.

Ein Konstruktor wird genau die gleichen Namen wie die Klasse hat und es nicht hat keinen Rückgabetyp überhaupt, nicht einmal Leere. Konstruktoren können sehr nützlich sein, um Anfangswerte für bestimmte Elementvariablen festzulegen.

Also add und print nicht Konstrukteur. nur X (int a=7, int b=6) { this->a = a; this->b = b; } ist Konstruktor.

1

Was sind "X res und X add"?

X res bedeutet, dass res ein Objekt der Klasse X ist; add ist der Name einer Memberfunktion der Klasse X und kann ein Objekt der Klasse X zurückgeben.