Методы класса C ++ - PullRequest
       8

Методы класса C ++

5 голосов
/ 27 марта 2012

Я изучаю 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;

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

Спасибо,

Lucas

Ответы [ 3 ]

9 голосов
/ 27 марта 2012

В файле .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 ++ или настоящий учебник, который объяснит вам, как работает синтаксис.И объектно-ориентированное программирование (если вы не знакомы с ним)

3 голосов
/ 27 марта 2012

Довольно просто - это всего лишь пример и одна из возможных реализаций. Обратите внимание, что следующее добавляет некоторые дополнительные вещи (например, 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;
}
1 голос
/ 27 марта 2012

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

// 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...