2012-03-26 2 views
4

Я изучаю C++, и у меня есть вопрос.Методы класса С ++

Я создал класс в Netbeans, который сделал Rectangle.h и Rectangle.cpp. Я пытаюсь добавить методы, которые выводят область и периметр переменных прямоугольника l и w. Я не знаю, как создавать методы в классе и как их включить в файл Rectangle.h.

Вот что я пытаюсь сделать:

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

Может кто-нибудь объяснить, как это сделать? Я весьма озадачен.

Спасибо,

Лукас

+8

Это хорошо написанный вопрос, но обратите внимание, что вы не собираетесь быть в состоянии выучить язык, как C++, не читая некоторые учебного материала; угадать и взломать будет только повредить ваш программирование в будущем. Я рекомендую книгу начинающих из [этого списка] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list), которая ответит на ваш вопрос и продолжит следить за вами. – GManNickG

+0

+1 для запроса объяснения вместо того, чтобы просто кому-то передать вам код. –

ответ

7

В файле .h у вас есть определение класса, где вы записать переменные-члены собственной функции-члены (как правило, в качестве прототипа)

В файле .cpp вы объявляете тело методов. Пример:

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

Но как gmannickg сказал, что вы должны прочитать книгу о C++ или настоящий учебник, это будет объясните, как работает синтаксис. И объектно-ориентированное программирование (если вы не знакомы с ним)

+0

большое спасибо! это отлично работает. – Lucas

3

Довольно просто - это всего лишь пример и одна возможная реализация. Обратите внимание, что следующее добавляет некоторые дополнительные вещи (например, const и конструктор), которые вам не обязательно нужны; в зависимости от вашего использования.

class Rectangle { 
    private: 
    double l, w; 

    // This constructor has optional arguments, meaning you can skip them (which will result in them being set to 0). 
    public: 
    Rectangle(const double l = 0, const double w = 0); 

    double Area(void) const; // the const keyword after the parameter list tells the compiler that this method won't modify the actual object 
    double Perim(void) const; 
} 

Rectangle::Rectangle(const double _l, const double _w) : l(_l), w(_w) { // this is an initializer list - as an alternative, here it would be possible to just assign the values inside the function body 
} 

double Rectangle::Area(void) const { 
    return l * w; 
} 

double Rectangle::Perim(void) const { 
    return l + l + w + w; 
} 
+0

Что, собственно, является конструктором? – Lucas

+0

Конструктор - это метод из класса, который будет вызываться, когда объект класса запутан. Вам действительно нужно прочитать что-то, что объясняет C++ и oop. – grifos

+0

Вы правы. Мне нужно получить хорошую книгу на C++. Спасибо за объяснение. – Lucas

1

Файл заголовка (.h) в основном касается указания интерфейса. Хотя вы также можете выполнять функции там, вы, как правило, этого не делаете. Вместо этого вы определяете класс в заголовке, а затем реализуете его в файле .cpp (.hpp, whatever). Например, ваш прямоугольник класс:

// 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

ОК, понял. Благодаря! – Lucas

Смежные вопросы