2012-03-26 18 views
4

Ich lerne C++ und ich habe eine Frage.C++ Klassenmethoden

Ich machte eine Klasse in Netbeans, die Rectangle.h und Rectangle.cpp gemacht. Ich versuche, Methoden hinzuzufügen, die den Bereich und den Umfang der Variablen l und w des Rechtecks ​​ausgeben. Ich weiß nicht, wie man Methoden in einer Klasse erstellt und wie man sie in die Rectangle.h-Datei einbaut.

Hier ist, was ich versuche zu tun:

Rectangle rct; 
rct.l = 7; 
rct.w = 4; 
cout << "Area is " << rct.Area() << endl; 
cout << "Perim is " << rct.Perim() << endl; 

Kann jemand erklären, wie dies zu tun? Ich bin so verwirrt.

Danke,

Lucas

+8

Es ist eine gut geschriebene Frage, aber beachten Sie gehen zu können, nicht eine Sprache wie C lernen ++ ohne einige Lernmaterialien zu lesen; Raten und hacken wird nur Ihre Programmierung in der Zukunft verletzen. Ich empfehle ein Anfängerbuch von [dieser Liste] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list), das deine Frage beantwortet und dich auf Kurs hält. – GManNickG

+0

+1 für die Frage nach einer Erklärung anstatt nur jemanden zu wollen, der Ihnen Code gibt. –

Antwort

7

In der H-Datei Sie die Klassendefinition haben, wo Sie die Membervariablen en Mitgliederfunktionen aufschreiben (allgemein als Prototyp)

In der CPP-Datei Sie deklarieren den Methodenkörper. Beispiel:

rectangle.h:

class rectangle 
{ 
    public: 
    // Variables (btw public member variables are not a good 
    // practice, you should set them as private and access them 
    // via accessor methods, that is what encapsulation is) 
    double l; 
    double w; 

    // constructor 
    rectangle(); 
    // Methods 
    double area(); 
    double perim(); 
}; 

rectangle.cpp:

#include "rectangle.h" // You include the class description 

// Contructor 
rectangle::rectangle() 
{ 
    this->l = 0; 
    this->w = 0; 
} 

// Methods 
double rectangle::area() 
{ 
    return this->w * this->l; 
} 

double rectangle::perim() 
{ 
    return 2*this->w + 2*this->l; 
} 

Aber wie gmannickg sagte Sie ein Buch über C++ oder ein echtes Tutorial lesen sollte, diesen Willen erkläre dir, wie die Syntax funktioniert. Und Objektorientierte Programmierung (wenn Sie nicht damit vertraut sind)

+0

vielen dank! das funktioniert super. – Lucas

3

Ganz einfach - das ist nur ein Beispiel und eine mögliche Implementierung. Beachten Sie, dass im Folgenden einige zusätzliche Dinge hinzugefügt werden (wie const und ein Konstruktor), die Sie nicht unbedingt benötigen; abhängig von Ihrer Verwendung.

+0

Was genau ist ein Konstruktor? – Lucas

+0

Ein Konstruktor ist eine Methode aus einer Klasse, die aufgerufen wird, wenn das Klassenobjekt instanziiert ist. Sie müssen wirklich etwas lesen, das C++ und OOP erklärt. – grifos

+0

Sie haben Recht. Ich muss ein gutes C++ Buch bekommen. Danke für die Erklärung. – Lucas

1

Die Headerdatei (.h) betrifft hauptsächlich die Angabe der Schnittstelle. Auch wenn Sie dort Funktionen implementieren können, tun Sie dies normalerweise nicht. Stattdessen definieren Sie die Klasse in der Kopfzeile und implementieren sie dann in der .cpp-Datei (.hpp, was auch immer). Zum Beispiel Ihrer Rechteck-Klasse:

// Rectangle.h 
#ifndef RECTANGLE_H 
#define RECTANGLE_H 

class Rectangle { 
public: 
    // constructors, just initialize our private members 
    Rectangle(int x, int y, int w, int h) 
     : _x(x), _y(y), _w(w), _h(h) { } 

    Rectangle() : _x(0), _y(0), _w(0), _h(0) { } 

    // implement these in Rectangle.cpp 
    int get_x(); 
    void set_x(int x); 

    int get_y(); 
    void set_y(int y); 

    int get_width(); 
    void set_width(int w); 

    int get_height(); 
    void set_height(int h); 

    int Area(); 
    int Perim(); 

private: 
    int _x, _y, _w, _h; 
}; 

#endif 

// Rectangle.cpp 
#include "Rectangle.h" 
#include <algorithm> 

using std::max; 

int Rectangle::get_x() { 
    return _x; 
} 

void Rectangle::set_x(int x) { 
    _x = x; 
} 

int Rectangle::get_y() { 
    return _y; 
} 

void Rectangle::set_y(int y) { 
    _y = y; 
} 

int Rectangle::get_width() { 
    return _w; 
} 

void Rectangle::set_width(int w) { 
    _w = max(w, 0); 
} 

int Rectangle::get_height() { 
    return _h; 
} 

void Rectangle::set_height(int h) { 
    _h = max(h, 0); 
} 

int Rectangle::Area() { 
    return _w * _h; 
} 

int Rectangle::Perim() { 
    return _w * 2 + _h * 2; 
} 
+0

OK, verstanden. Vielen Dank! – Lucas